力扣19 删除链表的倒数第N个结点

4 阅读1分钟

思路:

  • 本题要求只遍历一次,删除链表的倒数第n个节点
  • 由于链表只能从前到后遍历,并且链表长度未知,一个指针需要遍历两次才能找到对应节点
  • 所以我们用两个间隔n的指针一起遍历
  • 链表类问题为防止丢失头节点统一创建-1节点

代码:

  • 首先创建-1节点,返回结果就是该节点的next
  • 创建左右指针
  • 右指针先移动n的距离
  • 然后左右指针一起移动,直到右指针抵达末尾
  • 移除倒数第n个节点
var removeNthFromEnd = function (head, n) {
    let res = new ListNode(0, head)
    let left = res
    let right = res
    for (let i = 0; i < n; i++) {
        right = right.next
    }
    while (right.next !== null) {
        left = left.next
        right = right.next
    }
    left.next = left.next.next
    return res.next
};