给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
计算链表长度
我们首先从头节点开始对链表进行一次遍历,得到链表的长度 L。随后我们再从头节点开始对链表进行一次遍历,当遍历到第 L-n+1个节点时,它就是我们需要删除的节点。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function(head, n) {
let len=0
let node=new ListNode(0,head)
let n1=node,n2=node
while(n1){
len++
n1=n1.next
}
let k=1
while(n2){
if(k==len-n){
n2.next=n2.next.next
break
}
k++
n2=n2.next
}
return node.next
};
快慢指针
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function(head, n) {
let node=new ListNode(0,head)
let s=node
let q=head
let len=0
while(len<n){
len++
q=q.next
}
while(q){
q=q.next
s=s.next
}
s.next=s.next.next
return node.next
};