876.链表的中间节点
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
-
题目:876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)
-
思路:利用快慢指针,循环遍历当slow节点走一步,fast节点走两步,直到fast为null或fast.next为null条件成立终止循环,返回slow节点则为链表的中间节点。
class Solution {public ListNode middleNode(ListNode head) { ListNode slow = head;ListNode fast = head; while(fast!=null&&fast.next!=null){slow = slow.next;fast = fast.next.next;} return slow; } }
判断链接是否包含环
-
思路:利用快慢指针,当快慢节点重合,则说明包含环,否则,则说明不包含环。
-
如果
fast
最终遇到空指针,说明链表中没有环;如果fast
最终和slow
相遇,那肯定是fast
超过了slow
一圈,说明链表中含有环。