給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。javascript
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
複製代碼
說明:java
給定的 n 保證是有效的。node
這道題要用雙指針來實現。先用fast指針前進n,而後讓slow從head開始和fast一塊兒前進,直到fast到了末尾,此時slow的下一個節點就是要刪除的節點。(另外,若fast一開始前進n就已經不在鏈表中了,說明要刪除的節點正是head節點,那麼直接返回head的下一個節點接口。)bash
/*
* @lc app=leetcode.cn id=19 lang=javascript
*
* [19] 刪除鏈表的倒數第N個節點
*/
/**
* 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) {
if(head===null){
return head
}
if(n===0){
return head;
}
let fast=head;
let slow=head;
while(n>0){
fast=fast.next;
n--;
}
if(fast===null){
return head.next;
}
while(fast.next!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return head;
};
複製代碼