题目描述:
给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode();// 虚拟头节点
dummy.next = head;// 指向头节点
ListNode slow = dummy;// 慢指针
ListNode fast = dummy;// 快指针:指向删除目标节点的前驱
// 确定fast指针的位置:快慢指针相对距离为n
while (n != 0) {
fast = fast.next;
n--;
}
// 快慢指针跟进,使得快指针指向当前链表的尾节点
while (fast.next != null) {
slow = slow.next;
fast = fast.next;
}
// 删除操作
slow.next = slow.next.next;
// 返回虚拟节点的后继
return dummy.next;
}
}