题目描述:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
解题思路:
主要利用双指针,让右指针先走 n 步,再让两指针一起走直到右指针走到链表尽头为止。此时让左指针删除一个节点即可。注意需要判断一开始右指针就走到链表尽头的情况,如 [1],1,右指针一开始就会到链表尽头的下一个结点(null),此时返回的是头结点的 next 结点(因为头节点便是要删除的结点)。
完整代码:
/**
* 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) {
var left=head;
var right=head;
while(n--){
right=right.next;
}
if(right==null){
return head.next;
}
while(right.next!=null){
left=left.next;
right=right.next;
}
left.next=left.next.next;
return head;
};