删除链表的倒数第N个结点

  题目

  给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

  示例

  截自力扣

  

  思路

  快慢指针法,快指针先走n步,慢指针再一起和快指针走,直到快指针走到最后一个结点。

  代码

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
   if(head === null){
       return null;
   }
   var fast = head;
   var slow = head;
   //快指针先走n步
   while(n--){
       fast = fast.next;
   }
   //说明删除的是头结点
   //这里注意上面的循环以及把next赋给了fast
   if(fast === null){
       head = head.next;
   }else{
       while(fast.next){
           fast = fast.next;
           slow = slow.next;
       }
       slow.next = slow.next.next;
   }
    return head;
};

我的踩坑点:一开始我一直把判断删除头结点那里写成 if(fast.next === null) 导致如果删除的是头结点就一直报错,百思不得其解,后来一遍又一遍演算步骤才注意到是前面的while循环已经把next赋给了fast,太傻了。但总归还是看出来了。

 

posted @ 2021-10-30 11:06  打遍天下吴敌手  阅读(42)  评论(0编辑  收藏  举报