lt.876-链表的中间结点
[案例需求]

[思路分析]

[代码示例一, 朴素写法]
class Solution {
public ListNode middleNode(ListNode head) {
//遍历结点, 得到链表的个数 count, 再次遍历链表 返回地 count/2 + 1 个结点;
int count = 0;
ListNode temp = head;
while(temp != null){
count++;
temp = temp.next;
}
//遍历count/2 + 1 次
temp = head;
for(int i = 1; i < count / 2 + 1; i++){
temp = temp.next;
}
return temp;
}
}
[代码示例二, 快慢针法]
class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}
[思路分析三, 递归法]
class Solution {
int res = 0;
int count = 0;
public ListNode middleNode(ListNode head) {
//1. 两次遍历
//2. 栈
//3. 快慢针
if (head == null) return null;
count++;
ListNode node = middleNode(head.next);
if (node == null) {
res++;
if (res == (count % 2 == 1 ? count / 2 +

本文解析了如何在链表中找到中间节点,以及使用快慢针、哈希表和标记法检测环形链表及其入口。涉及多种方法,如朴素遍历、快慢针法和递归,同时讨论了环形链表的常见问题和解决方案。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



