快慢指针-lc876链表的中间节点
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。
示例 2:
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。
思路:利用快慢指针遍历链表,当快指针走完时,慢支真走到一半既为中间
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
//如果利用快慢指针
//若是链表无环 快指针到头,慢指针则是中间
// 1,2,3,4,5,6,
// 1,2,3,4,5,6,7 4
/**
* 快慢指针
* @param head
* @return
*/
public ListNode middleNode(ListNode head) {
if(head == null){
return head;
}
ListNode slow = new ListNode();
ListNode fast = new ListNode();
slow = fast = head;
while(fast!=null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
//leetcode submit region end(Prohibit modification and deletion)
不恋尘世浮华,不写红尘纷扰