【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;
        }
    }
}

相关推荐
辣椒日记3 分钟前
各种排序算法【持续更新中.....】
java·算法·排序算法
αβ³6 分钟前
选择排序算法
数据结构·算法
希望有朝一日能如愿以偿16 分钟前
力扣题解(最长连续递增序列)
数据结构·算法·leetcode
逍遥的编程笔记27 分钟前
实现Vue-tiny-diff算法
前端·javascript·vue.js·算法·vue源码
T0uken34 分钟前
【算法模板】图论:Tarjan算法求强连通分量
算法·图论
2301_7978596737 分钟前
CF 训练2
数据结构·算法
ZKang_不会过人39 分钟前
day 51 第十一章:图论part02 99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积
算法·深度优先·图论
Aurora_th39 分钟前
洛谷 P1347 排序(福建省历届夏令营)(图论:拓扑排序)
数据结构·c++·算法·图论·拓扑排序·洛谷
荣世蓥43 分钟前
5.C_Demo_排序
c语言·数据结构·算法
安…..1 小时前
力扣第五十四题——螺旋矩阵
算法·leetcode·职场和发展