佛山外贸网站制作公司,设计网站意味着什么,网络做推广广告公司,做网站推广广告删除链表中倒数第n个节点
给你一个链表#xff0c;删除链表的倒数第 n 个结点#xff0c;并且返回链表的头结点。
用例
输入#xff1a;head [1,2,3,4,5], n 2 输出#xff1a;[1,2,3,5] 输入#xff1a;head [1], n 1 输出#xff1a;[]
输入#xff1a;head …删除链表中倒数第n个节点
给你一个链表删除链表的倒数第 n 个结点并且返回链表的头结点。
用例
输入head [1,2,3,4,5], n 2 输出[1,2,3,5] 输入head [1], n 1 输出[]
输入head [1,2], n 1 输出[1]
提示
链表中结点的数目为 sz1 sz 300 Node.val 1001 n sz
示例代码
解法1普通解法
var removeNthFromEnd function(head, n) {let len0;let rootNodehead;while(head){len;headhead.next;}if(len1) return null;lenlen-n1;//截取的目标位置let i1;headrootNode;while(head){console.log(i,head.val)if(ilen-1){//删除下一个节点head.nexthead.next.next;break;}if(ilen){//删除当前rootNodehead.next;break;}i;headhead.next;}return rootNode;
};解法2辅助栈
/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/
/*** param {ListNode} head* param {number} n* return {ListNode}*/
var removeNthFromEnd function(head, n) {let stack[]let roothead;//入栈while(head){stack.push(head)headhead.next;}let nextnull;for(let i1;in;i){nextstack.pop();}let delstack.pop();//找到目标值let prevstack.pop(); if(prev){prev.nextnext;}else{rootnext;}return root;
};解法3 双指针
/*** param {ListNode} head* param {number} n* return {ListNode}*/
var removeNthFromEnd function(head, n) {let dummynew ListNode(0,head);let slowdummy;let firsthead;for(let i0;in;i){firstfirst.next;}while(first){firstfirst.next;slowslow.next;}slow.nextslow.next.next;return dummy.next;
};执行情况双指针 Tip 越简单的题使用越多的解法才能让自己对代码的理解得以增强哦