为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 > 其它综合 正文

LeetCode-019-删除链表的倒数第 N 个结点

三叶资源网 2022-12-12 19:18:50 其它综合 201 ℃ 0 评论

删除链表的倒数第 N 个结点

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

进阶:你能尝试使用一趟扫描实现吗?

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:利用栈

首先遍历一遍链表,将结点的值放进栈temp里,然后遍历temp,过滤掉第n个结点,剩下的重新组装成链表result,返回result

备注:进阶的做法可以采用双指针法,待优化。

import java.util.Stack;

public class Solution {
    /**
     * 方法一:利用栈
     * @param head
     * @param n
     * @return
     */
    public static ListNode removeNthFromEnd(ListNode head, int n) {
        if (head == null) {
            return null;
        }
        Stack<Integer> temp = new Stack<>();
        while (head != null) {
            temp.push(head.val);
            head = head.next;
        }
        Stack<Integer> result = new Stack<>();
        int count = 1;
        boolean findN = false;
        while (!temp.isEmpty()) {
            if (count == n) {
                temp.pop();
                findN = true;
                count++;
                continue;
            }
            result.push(temp.pop());
            count++;
        }
        if (!findN) {
            return null;
        }
        ListNode resultNode = new ListNode(-1);
        ListNode next = resultNode;
        while (!result.isEmpty()) {
            next.next = new ListNode(result.pop());
            next = next.next;
        }
        return resultNode.next;
    }

    public static void main(String[] args) {
        ListNode root = new ListNode(1);
        root.next = new ListNode(2);
        root.next.next = new ListNode(3);
        root.next.next.next = new ListNode(4);
        root.next.next.next.next = new ListNode(5);
        root = removeNthFromEnd(root, 2);
        while (root != null) {
            System.out.print(root.val + "->");
            root = root.next;
        }
    }
}

class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

【每日寄语】你今天的努力,是幸运的伏笔,当下的付出,是明日的花开。

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
滑动验证码薅羊毛sqlite二维码识别内存调用SubLime Text教程个人发卡url编解码引流软件源码自媒体硬盘遍历Xml文本编辑器易语言聊天室源码微信反多开检测图片相似度识别火山PC开发平台腾讯优图PcHook快递查询工具源码MB浏览框浏览
最新评论