- 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
思路:
双指针:通过一个指针走到null的距离可以定位另一个指针走到距离目标节点的距离,例如题目要求倒数第n个,那么快指针就先走n+1步(因为慢指针要走到目标节点的前一个才能进行删除操作),之后两个指针同步挪动,这样当快指针指向null时,慢指针一定指向目标节点的前一个节点
注意点:当只有一个节点时,可以借用dummy进行假代一个头节点
/**
* 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 dummy = new ListNode()
dummy.next = head
let n1 = dummy,n2=dummy //n1是慢指针,n2是快指针
for(let i = 0 ; i <= n ;i++){
n2 = n2.next
}
while(n2!=null){
n1 = n1.next
n2 = n2.next
}
n1.next = n1.next.next
return dummy.next
};
参考力扣