在链表的末尾插入节点

时间:2017-03-16 09:09:17

标签: c++ data-structures linked-list

下面的片段无法在链接列表的末尾插入节点。

void insert_end(int item){

    nodeptr newNode = new ListNode;
    newNode->data = item;
    newNode->next = NULL;

    if(head == NULL){
        head = newNode;
        curr = head;

    }else{
        curr = head;

        while(curr != NULL) curr = curr->next;
        curr = newNode;
    }
}

另一个在链接列表末尾插入节点有效的片段。

void insert_end(int item){

    nodeptr newNode = new ListNode;
    newNode->data = item;
    newNode->next = NULL;

    if(head == NULL){
        head = newNode;
        curr = head;

    }else{
        curr = head;

        while(curr->next != NULL) curr = curr->next;

        curr->next = newNode;
    }
}

我的问题是为什么第一个无效?实际上两个片段应该是相似的。 假设我已经有三个节点。现在我想插入另一个节点。

  1. 作为第一个算法,当curr = NULL时,则while循环将不满足。
  2. 作为第二个算法,当curr-> gt; next = NULL时,while while将不满足。
  3. 所以我可以说第一个算法'curr'和第二个算法'curr-> next'两者都相似,当“while loop”终止时? 如果它不相似那么为什么呢?

1 个答案:

答案 0 :(得分:1)

您必须了解指针是一个变量,其值是一个地址。

第一种算法是错误的,因为当你完成while循环的迭代时,curr指向NULL(地址0x0),而NULL不是你列表的有效节点。

第二个算法有效,因为当你完成while循环的迭代时,curr指向列表的最后一个节点,然后你将newNode添加到curr->接下来,用newNode的地址替换NULL。

希望这有帮助! :)