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

232 阅读1分钟

要求

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

尝试使用一趟扫描实现

思路

假设此题给的信息为 链表:1->2->3->4->5 , n=2

创建一个虚拟头,两个指针,pre、cur 先让cur走n步,然后pre与cur一起走,当cur指向null时,pre刚好指向须删除的链表节点的上一个节点。

1.png

2.png

3.png

4.png

详细代码

var removeNthFromEnd = function (head, n) {
    if (!head) return null;
    let ret = new ListNode(-1, head),
        pre = ret,
        cur = head;
    for (let i = 0; i < n; i++) {
        cur = cur.next;
    }
    if (!cur) return head.next;
    while (cur) {
        cur = cur.next;
        pre = pre.next;
    }
    pre.next = pre.next.next;
    return ret.next;
};