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