如何找到链表中的总项数?
问题的出现原因是:在一个带有循环的链表中,需要找到链表中节点的总数,并且需要检测循环,以避免多次计算某些节点。
解决方法如下所示:
static int count(Node n) { int res = 1; Node temp = n; while (temp.next != n) { res++; temp = temp.next; } return res; } static int countInLoop(Node list) { Node s_pointer = list, f_pointer = list; while (s_pointer != null && f_pointer != null && f_pointer.next != null) { s_pointer = s_pointer.next; f_pointer = f_pointer.next.next; if (s_pointer == f_pointer) return count(s_pointer); } return 0; }
以上代码中,`count`方法用来计算链表中的节点数,`countInLoop`方法用来检测链表中的循环并计算循环中的节点数。
注意:由于链表带有循环,所以`temp`不会为`null`。请阅读问题中提到的问题描述。
根据所给内容,我们可以整理出以下文章:
如何找到链表中的总项目数?
有一种解决方法是维护两个指针。第一个指针(*start)将始终指向起始节点,假设为节点A。另一个指针(*current)将被初始化为:current = start->next。现在,只需迭代每个节点,直到current指向start->next为止。并且不断递增一个计数器:numberOfNodes++。
代码如下:
public int countNumberOfItems(Node* start){
Node* current = start -> next;
int numberOfNodes = 1; //至少存在一个起始节点
while(current -> next != start){
numberOfNodes++;
current = current -> next;
}
return numberOfNodes;
}
在循环内部还应该添加current = current -> next
来更新当前指针的位置。
谢谢,已经修正了错误。
还可以补充说明“起始节点”可以是链表中的任何节点。