题目描述:
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
题目解析:快慢指针
代码:
struct ListNode* middleNode(struct ListNode* head){
if(head==NULL || head->next==NULL)
{
return head;
}
struct ListNode* slow=head;
struct ListNode* fast=head->next;
while(fast!=NULL)
{
slow = slow->next;
if(fast->next==NULL)
{
fast = fast->next;
}
else
{
fast = fast->next->next;
}
}
return slow;
}
struct ListNode* middleNode(struct ListNode* head){
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast!=NULL && fast->next!=NULL)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}