876.链表的中间节点
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
-
思路:利用快慢指针,循环遍历当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
一圈,说明链表中含有环。