问题描述
LeetCode 19. 删除链表的倒数第 N 个结点 (opens in a new tab),难度中等。
给你一个链表,删除链表的倒数第 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
进阶: 你能尝试使用一趟扫描实现吗?
题解
Solution.java
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int len = 0;
ListNode temp = head;
while (temp != null) {
len++;
temp = temp.next;
}
ListNode prev = new ListNode(0, head);
// 找到目标节点的前驱节点
while (len - n > 0) {
prev = prev.next;
len--;
}
// 判断要删除的节点是否是 head 节点
if (prev.next == head) {
prev.next = prev.next.next;
head = prev.next;
} else {
prev.next = prev.next.next;
}
return head;
}
}