快速找出长度未知链表的中间节点(快慢指针)
思路:设置两个指针,一个指针为fast,一个指针为slow,fast的步长为2,slow的步长为1,当fast到达链表的最后节点时,slow指针所指向的就是链表的中间节点。
具体代码实现:
1 LinkList *GetMidNode(LinkList *head) 2 { 3 LinkList *slow = head; 4 LinkList *fast = slow; 5 6 while(slow) 7 { 8 fast = fast->next; 9 if(fast) 10 { 11 fast = fast->next; 12 slow = slow->next; 13 } 14 } 15 return slow; 16 }
快慢指针的其他应用:
判断单链表是否为循环链表。