在单链表中,我们知道最后一个节点指向null
,以便我们可以通过遍历找到它。
如果单链表的最后一个节点指向某个中间节点,那么我们如何才能找到最后一个节点?
答案 0 :(得分:2)
如果“最后一个节点”指向某个其他节点,那么它实际上不是最后一个节点,是吗?更不用说这会拉伸并可能打破普遍接受的“清单”的定义。
通常要找到最后一个元素,比如
Node *current = list.start,
*next = current.next;
while (next != null)
{
current = next;
next = current.next;
}
print("Last node is " + current->value);
但是,这假设您的“最后一个节点”确实指向null。否则你将陷入无限循环。
将指针保持为列表的最后一个节点以及第一个节点通常是一种好的做法,因此这是一个不依赖于指向null的最后一个节点的简单解决方案。
答案 1 :(得分: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
答案 2 :(得分:0)
即使在单链接列表中,您也可以使用尾指针。它仍然是一个单一的链表,但它避免O(n=1)
找到最后一个节点。
答案 3 :(得分:0)
简单的遍历并满足指向空值的最后一个条件
void printlast(Node* n){
while(n!=NULL){
n=n->next;
if(n->next==NULL){
cout<<n->data<<" ";
}
}
}