这一题回忆版都不全,示例给的是一个合理的题干。(以后大概率不会考了,主要理解快慢指针的作用)
快慢指针一般思路:
1、我们使用slow和fast分别指向head slow和fast同时移动;
2、slow每次移动一个位置 ,fast每次移动两个位置;
3、当fast移动到null时,slow处于链表中点。
ListNode middleNode(ListNode head) {
// 快慢指针初始化指向 head
ListNode slow = head, fast = head;
// 快指针⾛到末尾时停⽌
while (fast != null && fast.next != null) {
// 慢指针⾛⼀步,快指针⾛两步
slow = slow.next;
fast = fast.next.next;
}
// 慢指针指向中点
return slow;
}
本题参考示例:
//原题有改动
//算法思想:用快慢指针的方法找中位点,fast移动2次,slow移动1次。
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool function(LinkList L){
if(!L || !L->next)
return FALSE;
LinkList slow=L,fast=L->next->next,p=NULL;
while(fast->next->next){
slow=slow->next;