【LeetCode算法题解】6、删除链表的倒数第N个节点

410 阅读1分钟

题目

难度:⭐️⭐️

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

示例

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

链表中结点的数目为 sz

1 <= sz <= 30

0 <= Node.val <= 100

1 <= n <= sz

进阶:你能尝试使用一趟扫描实现吗?

题解

/**
* 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) {
	
	let dummy = new ListNode();	
	dummy.next = head;

        let n1 = dummy;	
	let n2 = dummy;
	
	for (let i = 0; i < n; i++) {	
		n2 = n2.next	
	}
	
	while (n2.next !== null){
		n1 = n1.next;
		n2 = n2.next;	
	}

	n1.next = n1.next.next
	
	return dummy.next
};

笔记

要点:

1、单向链表没法倒着遍历

2、快慢指针

3、如果链表只有一个数呢?用dummy