一、题目
函数原型:
struct ListNode* middleNode(struct ListNode* head)
二、思路
要找到链表的中间结点,有两种思路:
暴力解法:先遍历一遍链表,计算出链表的长度,再次遍历链表,找到中间结点。
快慢指针:分别设置一个快指针和一个慢指针,慢指针一次走一步,快指针一次走两步,那么快指针遍历的结点数始终时慢指针的两倍,所以当快指针走到空时,慢指针就走到了中间结点。
三、代码
本文只提供快慢指针的代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* middleNode(struct ListNode* head){ struct ListNode *fast=head;//快指针 struct ListNode*slow=head;//慢指针 //while(fast->next&&fast) while(fast&&fast->next) { slow=slow->next; fast=fast->next->next; } return slow; }