簡體   English   中英

在鏈表的末尾插入節點

[英]Inserting a node in the end of a 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-> next = NULL時,while循環將無法滿足。

所以當“ while循環”終止時,我可以說第一個算法的“ curr”和第二個算法“ curr-> next”都相似嗎? 如果不相似,那為什么呢?

您必須了解指針是變量,其值是地址。

第一種算法是錯誤的,因為當您完成while循環的迭代時,curr指向NULL(地址0x0),並且NULL不是列表中的有效節點。

第二種算法之所以有效,是因為當您完成while循環的迭代時,curr指向列表的最后一個節點,然后將newNode添加到curr-> next,用newNode的地址替換NULL。

希望這可以幫助! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM