链表的数据结构
struct ListNode { int value; ListNode* next; };
那么在链表的末尾添加一个节点的代码如下:
void insert(ListNode** pHead, int value) { ListNode* pNew = new ListNode; pNew->value = value; pNew->next = NULL; if (*pHead == NULL) { *pHead = pNew; } else { ListNode* temp = *pHead; while (temp->next != NULL) { temp = temp->next; } pNode->next = pNew; } }
在上面的代码中,我们要特别注意函数的第一个参数是pHead是一个指向指针的指针。当我们往一个空链表中插入一个节点时,新插入的节点就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针,否则出了这个函数pHead仍然是一个空指针。
这这里指针的指针可以这样理解——pHead是一个指向指针的指针,*pHead是一个指针,链表的结点也是指针类型,那么pHead就可以指向多个指针,这样就可以把链表的所有结点连接起来形成一条链。