写一个函数center(list)找到一个链表的中间节点。 如果链表有基数个节点,那么返回中心节点。 如果链表有偶数个节点,返回中间偏左的节点。

    1. const list = new DoubleLinkedList()
    2. center(list) // null
    3. list.insert(4)
    4. list.insert(3)
    5. list.insert(2)
    6. list.insert(1)
    7. // list = 1-2-3-4
    8. const node = center(list) // node.key = 2
    9. list.insert(5)
    10. // list = 5-1-2-3-4
    11. const node2 = center(list) // node.key = 2

    答案:

    1. function center(list) {
    2. let fast = list.head, // 快指针,每次移动两个
    3. slow = list.head // 慢指针,每次移动一个
    4. while(fast) {
    5. fast = fast.next
    6. fast && (fast = fast.next)
    7. fast && (fast = fast.next)
    8. fast && (slow = slow.next)
    9. }
    10. return slow
    11. }