力扣 876. 链表的中间节点

发布时间 2023-03-22 23:03:50作者: 凪风sama

876. 链表的中间结点 - 力扣(LeetCode)

这道题刚开始我是直接暴力遍历链表一遍得到长度,然后再通过长度的一半来再次遍历确定要返回的结点。

看题解发现有更简单更直观的方法,快慢指针法

 1 struct ListNode* middleNode(struct ListNode* head)
 2 {//快慢指针法
 3       struct ListNode *fast=head;//快指针
 4       struct ListNode *slow=head;//慢指针
 5       while(fast&&fast->next)//保证快指针移动的合法性,而且循环结束的条件就是快指针移动到链表尾巴时退出循环
 6       {
 7           fast=fast->next->next;//快指针一次移动两个结点长度
 8           slow=slow->next;//慢指针一次移动一个结点长度
 9       }
10       return slow;//当快指针移动到最后时,慢指针正好移动至链表的中间
11 }

这样看快慢指针法更容易理解而且会比暴力遍历更加美观好看