leetcode 876. 链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
//方法一:
class Solution {
public:
ListNode* middleNode(ListNode* head)
{
ListNode *p1=head;
int len=0;
while(p1!=NULL)
{
p1=p1->next;
len++;
}
p1=head;
int index=len/2;
while(index)
{
p1=p1->next;
index--;
}
return p1;
}
};
//方法二: 采用了快慢指针class Solution {
public:
ListNode* middleNode(ListNode* head)
{
if(head==NULL||head->next==NULL) return head;
ListNode *fast=head;
ListNode *slow=head;
while(fast!=NULL)
{
fast=fast->next;
if(fast!=NULL) fast=fast->next;
slow=slow->next;
if(fast==NULL||fast->next==NULL) break;
}
return slow;
}
};