🌗 19. 删除链表的倒数第 N 个结点
2022年6月9日
- algorithm
🌗 19. 删除链表的倒数第 N 个结点
难度: 🌗
问题描述
解法
/**
* 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) {
// 思路:
// 快慢指针
// 慢指针指向要删除节点的前一个节点
// 快指针走到 null 时说明 慢指针为要删除节点的前一个节点
ListNode pre = new ListNode(-1);
pre.next = head;
ListNode res = pre;
ListNode fast = head;
// 快指针先走
for(int i = 0; i < n; i ++) {
fast = fast.next;
}
// 两者同时走
while(fast != null) {
fast = fast.next;
pre = pre.next;
}
// fast == null
pre.next = pre.next.next;
return res.next;
}
}