LeetCode0876-链表中间结点

双指针

经典的快慢指针,所以收录了

题目

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点

输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.

题解

/**
 * 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 {
    public ListNode middleNode(ListNode head) {
        ListNode sin = head ;
        ListNode dou = head ; 
        ListNode ans ;

        while(dou!=null && dou.next !=null){
            sin = sin.next ; 
            dou = dou.next.next; 
        }

        ans = sin;


        return ans ;  
    }
}

使用两个快慢指针,一个走一步一个走两步。走的快的走到头了就是找到了

posted @ 2021-10-30 10:55  RetenQ  阅读(25)  评论(0编辑  收藏  举报