链表遍历有什么问题?

时间:2018-07-23 14:48:11

标签: c++ algorithm pointers linked-list

我必须解决一个简单的问题,即已为我提供了链表的头节点,并且我必须将指针返回到最后一个节点。

这是两个实现:

这是行不通的(我尝试过leetcode和geekforgeeks),它导致了SEGMENTATION FAULT:

node* traversal(node* head){
    node* temp=head;
    while(temp!=NULL) temp=temp->next;

    return temp;
}

这个很好用:

node* traversal(node* head){
    node *tail,*temp=head;

    while(temp!=NULL){
        tail=temp;
        temp=temp->next;
    }

    return tail;
}

请告诉我第一个代码有什么问题,因为根据我的说法,两个代码是相同的。...但是第一个代码始终会给出SEGMENTATION FAULT

2 个答案:

答案 0 :(得分:2)

第一个代码块中的问题是:中断循环的力矩循环将指向NULL,并且将返回相同的指针,即指向最后一个节点的指针。

当循环迭代器(即temp移到最后一个节点的下一个节点,这意味着temp的值为NULL值然后返回函数)时,需要使用一个引用指针来存储最后一个节点的引用。

为了解析这两个变量,将需要获取链接列表的最后一个节点:

node *tail; // to assign the reference 
node *next = head; // to iterate through the link list.

答案 1 :(得分:1)

第一种情况下要检查的条件需要修改

node* traversal(node* head){
   node* temp=head;
   //when next node is null, that means this is the last node
   //break out of the while loop when you are at last node
   while(temp->next !=NULL){ 
      temp=temp->next;
   }
   //Return the pointer to the last node
   return temp;
}

根据您的原始代码,您将有temp指向null,当您尝试从调用函数取消引用时,它将返回SEGMENTATION FAULT