1

在一个单链表中,我们知道最后一个节点的next指向的是null,所以我们可以通过遍历找到它。

如果单链表的最后一个节点指向某个中间节点,那么我们如何找到最后一个节点?

4

4 回答 4

4

如果“最后一个节点”指向其他节点,那么它实际上不是最后一个节点,是吗?更不用说这会延伸并可能打破普遍接受的“列表”定义。

通常要找到最后一个元素,你会做类似的事情

Node *current = list.start,
     *next = current.next;

while (next != null)
{
    current = next;
    next = current.next;
}

print("Last node is " + current->value);

但是,这假设您的“最后一个节点”确实指向空值。否则你会陷入无限循环。

将指针保留在列表的最后一个节点以及第一个节点通常是一种很好的做法,因此这是一个不依赖于指向 null 的最后一个节点的简单解决方案。

于 2013-06-29T03:24:58.500 回答
0

好吧,我想把一个“is_visited”布尔值放到节点上就可以了:

//make sure the counters of all nodes are 0
cur=head_node
cur->visit=1
while( cur->next!=null AND cur->next->visit==0) {
  cur=cur->next
  cur->visit=1
}
//cur points to the last node
于 2013-06-29T05:24:50.360 回答
0

即使在单链表中,您也可以使用 Tail 指针。它仍然是一个单链表,但它避免O(n=1)了找到最后一个节点。

于 2013-06-29T08:24:37.590 回答
0

简单的只是遍历并满足指向null的最后一个条件

void printlast(Node* n){
    while(n!=NULL){
        n=n->next;
        if(n->next==NULL){
            cout<<n->data<<" ";
        }
    }
}
于 2020-04-21T16:02:02.937 回答