Leetcode #19 刪除鏈表的倒數第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/

Digiprove sealCopyright secured by Digiprove © 2018
Tags :

發表迴響