1. 程式人生 > 其它 >LeetCode0876-連結串列中間結點

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 ;  
    }
}

使用兩個快慢指標,一個走一步一個走兩步。走的快的走到頭了就是找到了