2017-03-16 155 views
0

在鏈表的末尾插入一個節點無效。在鏈表的末尾插入一個節點

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循環將不會滿足。

所以我可以說第一個算法的'curr'和第二個算法'curr-> next'都相似,當「while循環」終止時? 如果它不相似那麼爲什麼?

+0

您可以爲正在使用的語言添加標籤嗎? –

+1

增加了C++。 謝謝你通知我。 – Nahids

回答

1

你必須明白一個指針是一個變量,它的值是一個地址。

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

第二個算法是可行的,因爲當你完成while循環的迭代時,curr指向你列表的最後一個節點,並且你添加newNode到curr-> next,用newNode的地址替換NULL。

希望這會有所幫助! :)

+1

是的,我明白了:) – Nahids