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]
提示:
- 链表中结点的数目为 sz
- 1 <= sz <= 30
- 0 <= Node.val <= 100
- 1 <= n <= sz
LeetCode中的链表head是真实的头结点,不是虚拟的,需要自己定义一个虚拟头结点
双指针
/*** 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 static ListNode removeNthFromEnd(ListNode head, int n) {ListNode virtual = new ListNode(0);virtual.next = head;ListNode current = virtual;ListNode last = virtual;ListNode pre = null;int i = 0;while(last != null) {if(i >= n) {pre = current;current = current.next;}last = last.next;i++;}pre.next = current.next;return virtual.next;}}
