常見連結串列操作-求連結串列的中間節點(JAVA實現)
阿新 • • 發佈:2018-12-16
問題
給出任意單向連結串列,找出並返回該連結串列的中間節點。
奇數長度的連結串列,例如: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;
}