力扣热题100------19.删除链表的倒数第N个结点
给你一个链表,删除链表的倒数第 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]
实现思路:
- 如果链表为空或者 n 大于链表长度,直接返回头节点。
- 初始化两个指针 fast 和 slow ,都指向头节点。
- 将 fast 指针向前移动 n 步。
- 如果 fast 指针已经到达链表末尾,说明要删除的是头节点,直接返回头节点的下一个节点。
- 同时移动 fast 和 slow 指针,直到 fast 指针到达链表末尾。
- 删除 slow 指针的下一个节点,并更新 slow 指针的 next 指针。
- 返回头节点。
/*** 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(0);dummy.next = head;ListNode first = dummy;ListNode second = dummy;for (int i = 0; i <= n; i++) {first = first.next;}while (first != null) {first = first.next;second = second.next;}second.next = second.next.next;return dummy.next;}
}