leetcode-刪除鏈表的倒數第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 slowNode = {
        index:1,
        node:null
    };
    //存儲頭節點
    let headNode = head;
    //遍歷節點
    do{
        
        if(slowNode.index > n){
            if(!slowNode.node){
                slowNode.node = headNode;
            }else{
                slowNode.node = slowNode.node.next;
            }
        }

        
        if( head.next === null ){
            if(slowNode.index - n === 0){
                //刪除頭節點
                if(headNode.next){
                    headNode.val = headNode.next.val;
                    headNode.next = headNode.next.next;
                }else{
                    return null;
                }
            }else{
            //刪除中間和尾節點
                slowNode.node.next = slowNode.node.next.next;
            }
        }
        
        slowNode.index ++;
        head = head.next;

    }while(head !== null);


    return headNode;
    
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章