1. 程式人生 > >初級-連結串列-刪除連結串列的倒數第N個節點(JavaScript)

初級-連結串列-刪除連結串列的倒數第N個節點(JavaScript)

給定一個連結串列,刪除連結串列的倒數第 個節點,並且返回連結串列的頭結點。

示例:

給定一個連結串列: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.

說明:

給定的 n 保證是有效的。

進階:

你能嘗試使用一趟掃描實現嗎?

思路:

這道題要用雙指標來實現。先用first指標前進n,然後讓second從head開始和first一起前進,直到first到了末尾,此時second的下一個節點就是要刪除的節點。(另外,若first一開始前進n就已經不在連結串列中了,說明要刪除的節點正是head節點,那麼直接返回head的下一個節點介面。)

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
  let first = head, second = head;
  while (n > 0) {
    first = first.next
    n--
  }
  if (!first) return head.next;     // 刪除的是頭節點
  while (first.next) {
    first = first.next;
    second = second.next;
  }
  second.next = second.next.next;
  return head
};