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

相关推荐
NEFU_Jyj6 小时前
牛客周赛R168
算法
文丑颜不良啊14 小时前
LeetCode2221~2240题目解析
java·leetcode
Navigator_Z14 小时前
LeetCode //C - 1317. Convert Integer to the Sum of Two No-Zero Integers
c语言·算法·leetcode
D e re k ZH15 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶16 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
文丑颜不良啊16 小时前
LeetCode2161~2180题目解析
java·leetcode
雪落漂泊16 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
文丑颜不良啊18 小时前
LeetCode2141~2160题目解析
java·leetcode
LabVIEW开发18 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview