当前位置:   article > 正文

LeetCode(Java版)19. 删除链表的倒数第N个节点_java删除链表的倒数第n个节点

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

解法1:不需要去遍历两次,一次即可,思路是,用两个指针p,q先指向头节点,让q指针走到第n个位置,然后两个指针同时往后走,走到q.next==null是说明p已经到达倒数第n个节点的前面的那个节点,此时删除下一个节点即可。

注意:当删除头节点和只有一个元素的情况。

执行用时 : 2 ms,95.78% .内存消耗 : 34.4 MB, 89.34% 。

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode removeNthFromEnd(ListNode head, int n) {
  11. if(head==null)
  12. return head;
  13. ListNode p = head;
  14. ListNode q =head;
  15. //用count记录走了多少步,和最终链表的长度
  16. int count=0;
  17. while(q.next!=null){
  18. count++;
  19. //前n步只让q指针走
  20. if(count<=n){
  21. q=q.next;
  22. }else{
  23. q=q.next;
  24. p=p.next;
  25. }
  26. }
  27. //循环结束时p到达了倒数n个元素的前面一个元素
  28. //两个特殊情况,即链表只有一个元素和要删除的为头节点的情况
  29. if(head.next==null || count+1 == n){
  30. head=head.next;
  31. }else{
  32. p.next=p.next.next;
  33. }
  34. return head;
  35. }
  36. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/990759
推荐阅读
相关标签
  

闽ICP备14008679号