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;
    
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章