【算法题】力扣19题,删除链表的倒数第 n 个节点,并且返回链表的头结点

题目描述: 删除链表的倒数第 n 个节点,并且返回链表的头结点(力扣19题)
  • 法一:用找到链表倒数第N个结点的方法,来查找第N个位置

    1. 创建两个指针p1和p2,p1指向链表的亚结点(第二个结点,即头结点的下一个结点),P2指向链表的正数第N个结点。创建指针p3记录p1,用来返回
    2. 同时移动p1 和 p2 ,直到p2到尾。p1的下一个结点就是要删除的结点
    3. 删除 p1.next = p1.next.next;
    4. 返回p3,实际就是返回了删除后的p1指针
    5. 代码:
     public ListNode removeNthFromEnd(ListNode head, int n) {
         // p1 p2 之间的长度为 n+1
         ListNode p1 = new ListNode(0,head);
         ListNode p2 = head;// p1 是亚结点
         ListNode p3 = p1;// 记录p1
         for (int i = 1; i < n + 1; i++) {//查找n+1,也可以用++i
             if(p2 != null)
                 p2 = p2.next;
             else if (p2 == null) break;
         }
         // 移动p2到达n的长度
         while (p2 != null) {
             // 同时往后一步,保证p1 p2 之间距离为n
             p1 = p1.next;
             p2 = p2.next;
         }
         // 删除倒数第n个结点
         p1.next = p1.next.next;
         /*
          返回删除后的链表,因为p3记录的是p1的指针,
          p1包括一个空的首结点,所以去掉那个首节点就是经删除的链表
         */
         return p3.next;
        }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值