LeetCode.876. Middle of the Linked List
阿新 • • 發佈:2019-01-06
題目的大意為找尋LinkedList的中間節點,如果有兩個中間節點,返回第二個中間節點。
比如:
輸入:[1,2,3,4,5]
輸出:此列表中的結點 3 (序列化形式:[3,4,5])
或者:
輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
拿到這道題,我首先想到先獲取連結串列長度,再取中間值,去查詢節點。
程式碼實現為:
public ListNode middleNode(ListNode head) { int length = 1; ListNode temp = head; while (temp.next != null) { length++; temp = temp.next; } int middle = length / 2; for (int i = 0; i <= middle; i++) { if (i == middle) { return head; } head = head.next; } return null; }
執行通過後,查詢其他大神們提交的程式碼,發現還有一種結題方式比較好:
public ListNode middleNode(ListNode head) {
ListNode fast = head,slow = head;
while(fast!=null&& fast.next !=null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
一種類似於龜兔賽跑的方式,fast節點每次走兩步,slow節點每次走一步,當fast節點走到終點的時候,slow節點正好走一半,真是妙,學習了。
希望有一天我也能成為大神,加油。