思路:
如果链表的结点是奇数个,刚好返回中间的节点,如果链表的结点是偶数个,则返回的是中间第二个结点。要返回中间的结点,那么可以知道中间的结点是总结点的二倍。那么可以定义两个指针,一个是快指针,一个是慢指针,当慢指针走一步时,快指针走两步,当快指针走到链表结尾是,慢指针就走到链表的的中间结点。
走一步:
走两步:
代码如下:
struct ListNode* middleNode(struct ListNode* head ) {
// write code here
struct ListNode*slow= head;
struct ListNode*fast= head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}