一、题目
函数原型:
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; }