1、题目说明
给定一个带有头结点 head
的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。(说明:给定链表的结点数介于 1
和 100
之间。)
示例1:
输入:[1,2,3,4,5]
输出:[3,4,5]
示例2:
输入:[1,2,3,4,5,6]
输出:[4,5,6]
2、思路
使用快慢指针的方式,快指针走两步,慢指针走一步,通过判断快指针,来确定返回。因为元素个数分为奇数、偶数个。
3、代码
ListNode* middleNode(ListNode* head) {
if(NULL == head || NULL == head->next)
return head;
ListNode *low = head;
ListNode *fast = head;
while(1)
{
if(NULL == fast->next)
return low;
else if(NULL == fast->next->next)
return low->next;
fast = fast->next->next;
low = low->next;
}
}