1. 程式人生 > >常見連結串列操作-求連結串列的中間節點(JAVA實現)

常見連結串列操作-求連結串列的中間節點(JAVA實現)

問題

給出任意單向連結串列,找出並返回該連結串列的中間節點。

奇數長度的連結串列,例如:1->2->3->4->5 返回節點 3

偶長度的連結串列,例如:1->2->3->4->5->6 返回節點 4

解題思路

與連結串列中環的檢測一樣,這題同樣可以使用快慢指標來解決。

定義兩個指標fast和slow。slow一次遍歷一個節點,fast一次遍歷兩個節點,由於fast的速度是slow的兩倍,所以當fast遍歷完連結串列時,slow所處的節點就是連結串列的中間節點。

程式碼

    public class ListNode {
        int
val; ListNode next; ListNode(int x) { val = x; } } /** * 尋找連結串列的中間節點 * * @param node * @return */ public static ListNode middleNode(ListNode head) { if (head == null || head.next == null) { return head;
} ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } return fast == null ? slow : slow.next; }

博文地址