【LeetCode每日一题】[中等]19. 删除链表的倒数第N个节点
19. 删除链表的倒数第N个节点
题目来源
算法思想:链表
题目:
java代码
思路:快慢指针
- 快指针先走n步,然后快慢一起走,
- 直到快指针走到最后,输出慢指针。
- 利用三个指针[p3,p2,p1]三者顺序;
- p1指向末尾null时, p2指向要删除的节点, p3在p2前一个节点
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode first = new ListNode(0);//头结点
first.next = head;//保存链表
ListNode p1 = head;//[p3,p2,p1]三者顺序
ListNode p2 = head;
ListNode p3 = first;
//p1向前移动n个距离
for (int i = 0; i < n; i++) {
p1 = p1.next;
}
//p1,p2,p3同时向后移,直到p1指向null,此时p2指向要删除的节点,p3在p2的前一个节点
while (p1 != null) {
p1 = p1.next;
p2 = p2.next;
p3 = p3.next;
}
//令p3的下一个是p2的下一个结点,删除p2结点
p3.next = p2.next;
return first.next;//利用头结点返回链表
}
}