给定一个头结点为 head
的非空单链表,返回链表的中间结点,如果有两个中间结点,则返回第二个结点。
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode *p=head;
int n=0,i=0,j=0;
while(p!=NULL) //求长度n
{
n++;
p=p->next;
}
if(n%2==0) //链表个数为偶数
{
p=head;
while(p!=NULL&&i<n/2)
{
i++;
p=p->next;
}
return p;
}
else //链表个数为奇数
{
p=head;
while(p!=NULL&&j<n/2)
{
j++;
p=p->next;
}
return p;
}
}