要求
给一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
尝试使用一趟扫描实现
思路
假设此题给的信息为 链表:1->2->3->4->5 , n=2
创建一个虚拟头,两个指针,pre、cur 先让cur走n步,然后pre与cur一起走,当cur指向null时,pre刚好指向须删除的链表节点的上一个节点。
详细代码
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;
};