快慢指针:
定义两个指针,一个快,一个慢,可以有多种用途。例如:快速找到位置长度单链表中的中间结点;对于循环链表中利用快慢指针也可以判断是否存在环。
快速找到位置长度单链表中的中间结点:
1)使用一个指针,先索引一遍获取总长度,再取长度一半去循环获取到中间值;O(3L/2)。
2)使用两个指针,快指针和慢指针,快指针一次向前走2格,慢指针一次走一格,当快指针走完全程,慢指针正好走在中间;O(L/2)。
解析:设立两个指针,*p,*q。p每次移动两个位置,即P=p->next->next,q每次移动一个位置即 q=q->nwxt.当p到达最后一个结点时,q就是中间结点了。
void searchMid(node *head, node *mid) { node *temp = head; while (head->next->next != NULL) { head = head->next->next; temp = temp->next; mid = temp; } }nex