写一个函数center(list)
找到一个链表的中间节点。 如果链表有基数个节点,那么返回中心节点。 如果链表有偶数个节点,返回中间偏左的节点。
const list = new DoubleLinkedList()
center(list) // null
list.insert(4)
list.insert(3)
list.insert(2)
list.insert(1)
// list = 1-2-3-4
const node = center(list) // node.key = 2
list.insert(5)
// list = 5-1-2-3-4
const node2 = center(list) // node.key = 2
答案:
function center(list) {
let fast = list.head, // 快指针,每次移动两个
slow = list.head // 慢指针,每次移动一个
while(fast) {
fast = fast.next
fast && (fast = fast.next)
fast && (fast = fast.next)
fast && (slow = slow.next)
}
return slow
}