题解 | #删除链表的倒数第n个节点#

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

https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

1、利用变量副本和dummy节点跳过某个节点

2、比较重要的是利用了len - n 和 len - (len - n) = n 节约时间不用求整个长度

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode removeNthFromEnd (ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode first = dummy;
        ListNode second = dummy;
        // 多一个节点,假设len是长度,那么目前first跑的距离是n+1,还剩len - n -1
        for (int i = 0; i <= n ; i++) {
            first = first.next;
        }
        // len - (len - n -1) = n + 1 first跑的距离是len - n - 1,second跑的距离也是len - n -1,那剩下的距离是n + 1,所以是倒数的第n + 1个节点
        while (first != null) {
            first = first.next;
            // 会跑在目标的前一个,因为多一个节点
            second = second.next;
        }
        // 利用变量副本把节点跳过一个,n+1的节点操作第n的节点跳过
        second.next = second.next.next;
        return dummy.next;
    }
}

日常记录~

#链表删除#
全部评论

相关推荐

昨天 13:29
已编辑
湖南铁道职业技术学院 后端
小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务