删除链表的倒数第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,太傻了。但总归还是看出来了。