19. 删除链表的倒数第 N 个结点
题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
题解
思路:找到倒数第 n+1 个节点,然后删除其下一个节点。
注意:使用虚拟头节点,链表为空时方便处理。
public ListNode removeNthFromEnd(ListNode head, int n) {
// 边界处理可以使用头节点,链表为空时方便处理
ListNode dummy = new ListNode(-1);
// 头节点和链表 链接
dummy.next = head;
// 处理有虚拟头节点的链表,步骤一样
// 先走n+1步(存在头节点,+1)
ListNode p1 = dummy;
for (int i = 0; i < n + 1; i++) {
p1 = p1.next;
}
// 一起走
ListNode p2 = dummy;
while (p1 != null) {
p1 = p1.next;
p2 = p2.next;
}
// 找到倒数第 n+1 个节点,删除下一下
p2.next = p2.next.next;
return dummy.next;
}