链式存储-快慢指针

快慢指针:

定义两个指针,一个快,一个慢,可以有多种用途。例如:快速找到位置长度单链表中的中间结点;对于循环链表中利用快慢指针也可以判断是否存在环。

快速找到位置长度单链表中的中间结点:

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
原文地址:https://www.cnblogs.com/Yang-Xin-Yi/p/14647236.html