【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目


1- 思路

模式识别:删除倒数第 n 个结点 ------> 定义 dummyHead 并用双指针实现删除逻辑


2- 实现

⭐19. 删除链表的倒数第 N 个结点------题解思路

java 复制代码
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null){
            return head;
        }
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode fast = dummyHead;
        ListNode slow = dummyHead;
        for(int i = 0 ; i < n ; i++){
            fast = fast.next;
        }

        while(fast.next!=null){
            slow = slow.next;
            fast = fast.next;
        }

        slow.next = slow.next.next;
        return dummyHead.next;
    }
}

3- ACM实现

java 复制代码
public class removeLastN {

    static class ListNode{
        int val;
        ListNode next;
        ListNode(){}
        ListNode(int x){
            val = x;
        }
    }

    public static ListNode removeLast(ListNode head,int n ){
        // 双指针
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode slow = dummyHead;
        ListNode fast = dummyHead;

        for(int i = 0 ; i < n ;i++){
            fast = fast.next;
        }

        while(fast.next!=null){
            slow = slow.next;
            fast = fast.next;
        }

        slow.next = slow.next.next;
        return dummyHead.next;
    }

    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        System.out.println("输入链表长度");
        int n = sc.nextInt();
        System.out.println("输入链表元素");
        ListNode head = null,tail = null;
        for(int i = 0 ; i < n;i++){
            ListNode newNode = new ListNode(sc.nextInt());
            if(head==null){
                head = newNode;
                tail = newNode;
            }else{
                tail.next = newNode;
                tail = newNode;
            }
        }
        System.out.println("输入删除倒数第几个元素");
        int k = sc.nextInt();
        ListNode Res = removeLast(head,k);
        while(Res!=null){
            System.out.print(Res.val+" ");
            Res = Res.next;
        }
    }
}

相关推荐
ccLianLian16 分钟前
计算机基础·cs336·RLHF
深度学习·算法
上海合宙LuatOS29 分钟前
LuatOS核心库API——【hmeta 】硬件元数据
单片机·嵌入式硬件·物联网·算法·音视频·硬件工程·哈希算法
滴滴答滴答答1 小时前
LeetCode Hot100 之 17 合并区间
算法·leetcode·职场和发展
你怎么知道我是队长1 小时前
C语言---排序算法8---递归快速排序法
c语言·算法·排序算法
ccLianLian1 小时前
数据结构·链表的数组实现
数据结构·链表
007张三丰1 小时前
软件测试专栏(5/20):自动化测试入门指南:从零开始构建你的第一个测试框架
自动化测试·python·算法·压力测试·测试框架
Zachery Pole1 小时前
根据高等代数与数分三计算线性回归中的w
算法·回归·线性回归
得一录2 小时前
星图·全参数调试qwen3.1-B
深度学习·算法·aigc
yyjtx2 小时前
DHU上机打卡D22
算法
plus4s2 小时前
2月14日(76-78题)
c++·算法·图论