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

这篇博客介绍了如何使用双指针法在链表中找到并删除倒数第K个节点。首先,让一个指针先移动n步,然后两个指针同时移动,当先移动的指针到达链表末尾时,第二个指针就位于倒数第n个节点。接着,记录要删除节点的前一个节点,并进行删除操作。这种方法有效地避免了空指针异常并简化了删除过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述
链表中倒数第K个节点

解题思路:

  1. 双指针 找到倒数第K个节点
  2. 记录要删除节点的前一个节点
   public ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here
        if(head ==null){
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        ListNode prev = head;
        // 第一个指针先移动n步
//         for(int i=0;i<n;i++){
//             fast=fast.next;
//         }
        int i =0;
        while(i<n){
            if(fast ==null){
                return null;
            }
            fast =fast.next;
            i++;
        }
        //同时移动 ,当第一个指针走到尾部的时候,此时第2个slow指针就是倒数第n个节点位置
        while(fast!=null){
            fast =fast.next;
            prev =slow; // 记录要删除元素的前一个节点
            slow =slow.next;
            // 如果写在后面,会报空指针异常 
        }
        // 删除倒数第n个节点 即slow
        ListNode temp;
        if(slow!=head){ // 若不是头节点
            temp = prev.next; //记录即将删除节点
            // 让前一个节点的next 指向要删除节点的next
            prev.next = temp.next; 
        }else{
            temp = head;
            head =head.next;
        }
        return head;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值