力扣876. 链表的中间结点
作者:互联网
题目描述:
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
//双指针问题-上下指针-快慢指针
typedef struct ListNode Node;
struct ListNode* middleNode(struct ListNode* head){
//如果链表为空,或者链表只有一个节点
//返回头节点-return head;
if(head == NULL||head->next==NULL)
return head;
//定义两个指针 -快慢指针
//Node*slow=head,*fast=head;
//快慢指针最开始分别指向头节点
//slow走一步,fast走两步;
Node*slow=head,*fast=head;
//奇数个节点:
//1 2 3 4 5
//fast指向5的时候,slow指向3;
//偶数个节点:
//1 2 3 4 5 6
//fast指向NULL的时候,slow指向4
//因为不知道链表是奇数个还是偶数个节点
//所以while的循环控制条件要用&&
//fast!=NULL&&fast->next!=NULL
while(fast&&fast->next)
{
//slow走一步,fast走两步;
slow=slow->next;
fast=fast->next->next;
}
//最后要求返回中间节点 -return slow;
return slow;
}
标签:力扣,head,slow,876,fast,next,链表,节点 来源: https://blog.csdn.net/A240428037/article/details/115618098