C++ 在链表末尾插入节点

C++ 在链表末尾插入节点,c++,data-structures,linked-list,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;

下面的片段对于在链表末尾插入节点无效

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;
    }
}
另一个可用于在链表末尾插入节点的片段

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;
    }
}
我的问题是为什么第一个无效?实际上,两个片段应该是相似的。 假设我已经有三个节点了。现在我想插入另一个节点

  • 当curr=NULL时作为第一个算法,则while循环将不满足
  • 当curr->next=NULL时作为第二个算法,则while循环将不满足 所以当“while循环”终止时,我可以说第一个算法的“curr”和第二个算法的“curr->next”都是相似的吗?
    如果不相似,为什么

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

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

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


    希望这有帮助!:)