LeetCode——19. 删除链表的倒数第N个节点

103 阅读1分钟

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

解题思路

  • 设置哨兵指针 prev ,cur 指针遍历链表
  • 让 cur 指针先走 n 步后,prev 指针开始走
  • 当 cur 指针遍历完成后,删除 prev 指针的下一个节点

代码实现

/**
 * 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 node = new ListNode(0)
    node.next = head 
    // 哨兵指针
    let prev = node
    // 链表遍历指针
    let cur = head 
    while(cur){
        // 当 cur 指针走了 n 步后,prev 指针开始走
        if(--n < 0){
         prev = prev.next   
        }
        cur = cur.next 
    }
    // cur 指针遍历完成后,prev 的下一个节点即要被删除的节点
    prev.next = prev.next.next
    return node.next
};