2017-03-16 116 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