//单链表中的快慢指针:快指针每次沿链表向前移动2,慢指针每次沿链表向前移动1。
//应用1:判断单链表是否存在环
#include<iostream>
#include<assert.h>
using namespace std;
typedef struct node
{
int data;
node *next;
};
bool isLoop(node *head)
{
node *p = head;//快指针
node *q = head;//慢指针
while(p->next != NULL)
{
p = p->next;
q = q->next;
if(q == p)
return true;//相遇,说明有环
}
if(p->next == NULL)
return false;
}
//应用2:寻找循环链表的入口。
//应用3:在有序链表中寻找中位数。
//思路:
//链表结点的个数是奇数:快指针移动到表尾时,慢指针所指的结点即为中位数;
//链表结点的个数是偶数:快指针移动到倒数第二个结点,这时可以返回上中位数或下中位数或两者之和的一半。
快慢指针
最新推荐文章于 2020-10-01 09:42:32 发布