当前位置:   article > 正文

Java 删除链表的倒数第 N 个结点_删除链表的倒数第n个节点java

删除链表的倒数第n个节点java

删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 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]

题解

解题方法:快慢指针法,一个快指针先向后遍历n个位置,快慢指针循环同时遍历

代码逐行解析

  1. public ListNode removeNthFromEnd(ListNode head, int n) {
  2. // 首先先声明一个头节点dummy,无实际意义,方便解题
  3. ListNode dummy = new ListNode(0, head);
  4. // 声明一个快指针节点指向head的第一个节点位置
  5. ListNode first = head;
  6. // 声明一个慢指针节点为头指针dummy节点位置
  7. ListNode second = dummy;
  8. // 先让快指针先向后移动n个节点位置
  9. for (int i = 0; i < n; ++i) {
  10. first = first.next;
  11. }
  12. // 循环遍历链表,当快指针first == null,说明倒数第n个节点就是第一个节点,就执行second.next = second.next.next;因为second.next是自定义头节点无实际意义,second.next.next;就为第一个节点的下一个节点null,所以这是节点就被删除,head此时为null
  13. while (first != null) {
  14. // 快慢指针同时向后移动,直到快指针指向空,退出循环
  15. first = first.next;
  16. second = second.next;
  17. }
  18. second.next = second.next.next;
  19. // dummy.next,就是自定义头节点往后的所有节点,也就是题目给出的head节点链表
  20. ListNode ans = dummy.next;
  21. return ans;
  22. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/990772
推荐阅读
相关标签
  

闽ICP备14008679号