首页 > 解决方案 > 这个链表遍历有什么问题?

问题描述

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

这里有两个实现:

这个不起作用(我尝试了 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

标签: c++algorithmpointerslinked-list

解决方案


第一个代码块中的问题是: moment loop will break temp 指向 NULL 并且返回相同的指针,即指向最后一个节点的指针。

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

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

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

推荐阅读