5.删除链表的倒数第N个节点

[复制链接]
发表于 2025-12-8 10:42:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
19.删除链表的倒数第N个节点

标题:

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)
分析:

要删除倒数第几个节点,那么我们须要怎么做呢?我们须要界说两个指针,快指针和慢指针,让快指针先走n步,再让慢指针和快指针一起今后走。
那么什么时间制止呢?当fast指针指向末了一个节点时(fast.next()==null)时制止,此时slow指针指向的就是 size - n个元素即倒数第 n + 1个元素,以是我们可以利用倒数 n + 1 个元向来删除倒数第 n 个元素。
比如一共有8个元素(1,2,3,4,5,6,7,8),当我们要删除倒数第2个元素,即7:

  • 先让 fast 走两步,0+2=2;
  • 再让 slow 和 fast 一起走,当 fast 再走了 6 步后到达了末端 (8),此时 slow 到达了(6)那么现在slow在的位置是倒数第3个位置。
代码:

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. *     int val;
  5. *     ListNode next;
  6. *     ListNode() {}
  7. *     ListNode(int val) { this.val = val; }
  8. *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12.     public ListNode removeNthFromEnd(ListNode head, int n) {
  13.         ListNode dummyNode = new ListNode(0, head);
  14.         ListNode fast = dummyNode, slow = dummyNode;
  15.         for(int i = 0; i < n; i++){
  16.             fast = fast.next;
  17.         }
  18.         while(fast.next != null){
  19.             fast = fast.next;
  20.             slow = slow.next;
  21.         }
  22.         slow.next = slow.next.next;
  23.         return dummyNode.next;
  24.     }
  25. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表