JS算法题之删除链表的倒数第N个节点
题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
说明:
给定的 n 保证是有效的。
示例
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.解答
这题不难,可以直接遍历一次,获取链表的长度,然后再次遍历到对应的节点,直接删除
也可以遍历一次,让单向链表成为双向链表,然后直接删除也可,本文采取第二种做法
var removeNthFromEnd = function(head, n) {
let cur = head;
while(cur.next){
cur.next.prev = cur;
cur = cur.next;
}
if(n == 1){
// 删除最后一个节点
if(!cur.prev){
return null;
}
else{
cur.prev.next = null;
return head;
}
}
while(n > 0 && cur){
if(n == 1){
if(!cur.prev){
// 删除第一个节点
cur.next.prev = null;
return cur.next
}
else{
cur.prev.next = cur.next;
cur.next.prev = cur.prev;
return head;
}
}
cur = cur.prev;
n--;
}
};本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!