【发布时间】:2013-06-26 21:54:25
【问题描述】:
在单链表中,我们知道最后一个节点的next指向null,这样我们就可以通过遍历找到了。
如果单链表的最后一个节点指向某个中间节点,那么如何找到最后一个节点?
【问题讨论】:
-
问题不清楚。如果您对循环检测感兴趣:查找 Floyd 算法。
标签: data-structures linked-list
在单链表中,我们知道最后一个节点的next指向null,这样我们就可以通过遍历找到了。
如果单链表的最后一个节点指向某个中间节点,那么如何找到最后一个节点?
【问题讨论】:
标签: data-structures linked-list
简单的只是遍历并满足最后一个指向null的条件
void printlast(Node* n){
while(n!=NULL){
n=n->next;
if(n->next==NULL){
cout<<n->data<<" ";
}
}
}
【讨论】:
即使在单链表中,您也可以使用尾指针。它仍然是一个单链表,但它避免了O(n=1) 查找最后一个节点。
【讨论】:
好吧,我想给节点加上一个“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
【讨论】:
如果“最后一个节点”指向其他节点,那么它就不是真正的最后一个节点,是吗?更不用说这会延伸并可能打破普遍接受的“列表”定义。
通常要找到最后一个元素,你会做类似的事情
Node *current = list.start,
*next = current.next;
while (next != null)
{
current = next;
next = current.next;
}
print("Last node is " + current->value);
但是,这假定您的“最后一个节点”确实指向 null。否则会陷入死循环。
将指针保留在列表的最后一个节点以及第一个节点通常是一种很好的做法,因此这是一个不依赖于指向 null 的最后一个节点的简单解决方案。
【讨论】: