Leetcode #19 刪除鏈表的倒數第N個節點
題目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 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) {
let length = 0;
let currentNode = head;
// 得出鏈表長度
while(currentNode) {
console.log("currentNode=",currentNode.val);
currentNode = currentNode.next;
length++;
}
// 算出要刪除元素的位置(從0開始計算),減掉給的n
let index = length - n;
currentNode = head;
console.log("length=",length);
console.log("index=",index);
// 如果要刪除的是第一個元素,則直接置換成下一個node
if (index == 0) {
return currentNode.next;
}
for (let i = 0; i < length; i++) {
console.log("currentNode1=",currentNode.val);
console.log("i=",i);
// 遍歷到要刪除的前一個元素
if (i == (index - 1)) { // 減一代表把前一項置換掉
currentNode.next = currentNode.next.next;
return head;
} else {
currentNode = currentNode.next;
}
}
};
題目連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/description/
Copyright secured by Digiprove © 2018
Vance
0
Tags :