题目:
难度:Middle
相关话题:链表
、双指针
给定一个链表,删除链表的倒数第n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 *n* = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
思路:
定义双指针
,其中指针2
比指针1
慢n
,等到指针1
到达最后的时候,需要删除的就是指针2.next
。
注意:
如果定义时指针1
已经为null
,说明要删除的就是头一个,直接返回head.next
。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* 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)return null
let first=head,second=head
while(first && n-->0)first=first.next
if(!first)return head.next
while(first && first.next){
first=first.next
second=second.next
}
let nxt=second.next
// if(!nxt)return null
second.next=nxt.next
return head
};
扩展阅读: