(leetcode)力扣100 29删除链表的倒数第 N 个结点(双指针)

题目

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

数据范围

链表中结点的数目为 sz

1 <= sz <= 30

0 <= Node.val <= 100

1 <= n <= sz

测试用例

示例1

java 复制代码
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例2

java 复制代码
输入:head = [1], n = 1
输出:[]

示例3

java 复制代码
输入:head = [1,2], n = 1
输出:[1]

题解(双指针,博主捞比版本)

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null||head.next==null){
            return null;
        }
       
        int temp=n;
        ListNode pre=head;
        boolean flag=false;
        ListNode pos=null;
        int len=0;
        while(pre!=null){
            len++;
            pre=pre.next;
            if(flag) pos=pos.next;
            if(n>=0){
                n--;
            }
            
            if(n<0&&flag==false){
                pos=head;
                flag=true;
            }
        }
        if(len==temp){
            head=head.next;
        }else{
            pos.next=pos.next.next;
        }
    
        return head;
    }
}

题解2 (双指针,官方版)

java 复制代码
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // 1. 定义虚拟头节点,指向 head,方便处理删除头节点的情况
        ListNode dummy = new ListNode(0, head);
        ListNode fast = head;
        ListNode slow = dummy;

        // 2. 让快指针先走 n 步
        for (int i = 0; i < n; i++) {
            fast = fast.next;
        }

        // 3. 快慢指针同步移动,直到快指针走到末尾
        // 此时 slow 会恰好停在待删除节点的前一个位置
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }

        // 4. 执行删除
        slow.next = slow.next.next;

        return dummy.next;
    }
}

思路

这道题依然很简单,对于链表的删除操作,在O1空间下,并且只扫描一次,可以使用双指针进行操作,如何使用双指针,看官解就行了,博主虽然也写出来了,效率也一样,但可读性太差,也完全不规范,建议记忆规范版本即可。

相关推荐
地平线开发者9 小时前
模型量化入门:从浮点模型到低比特表示
算法
枫叶林FYL9 小时前
【群体智能集群控制工程实践】第10章 无人舰队核心功能实现
大数据·人工智能·算法
不会就选b10 小时前
【无标题】
算法
m0_7393128710 小时前
【自动驾驶和机器人控制】万向锁(Gimbal Lock)原理详解 + 和欧拉角 / 四元数 / SO(3)对比
算法·机器人·自动驾驶
Felven10 小时前
A. Eating Game
算法
血小板要健康11 小时前
队列 + 宽搜(BFS):二叉树层序遍历 算法总结
java·数据结构·笔记·算法·leetcode·宽度优先
Felven11 小时前
A. Riptide
算法·c 算法
m0_7393128711 小时前
四元数、李群SO(3)/李代数so(3)的作用及应用场景
算法·机器人·自动驾驶
artificiali12 小时前
880 第4章多元
人工智能·算法
Felven12 小时前
B. Deja Vu
数据结构·算法