Leetcode链表刷题集合

【Java完整版 面试必备】Leetcode Top100题目和答案-链表篇 阅读详情

链表

对链表类算法题做个小集合,题解基本来LeetCode题解与labuladong的算法网站,自己加以理解写注释。代码都是测试跑通的。

下面使用的链表结构:

class ListNode{
    public ListNode next;
    public int val;

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

leetcode 141. 判断链表是否有环

判断链表是否有环

使用快慢指针进行求解。

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode fast = head,slow = head;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;

            if(slow == fast) return true;
        }
        return false;
    }
}

leetcode 142. 环形链表 II

142. 环形链表 II:判断链表是否有环的同时,返回链表中环的起始位置节点

// leetcode 142 环形链表 II
// 判断链表是否有环的同时,返回链表中环的起始位置节点
public ListNode detectCycle(ListNode head) {
    // 此处若不判断,当链表只有一个节点时(且无环时),会导致下面代码不正确。
    if(head == null || head.next == null){
        return null;
    }

    ListNode fast = head, slow = head;
    while(fast != null && fast.next != null){
        fast = fast.next.next;
        slow = slow.next;

        if(fast == slow) break;
    }
    if(fast != slow){
        return null; // 无环
    }
	
    
    slow = head;
    while(fast != slow){
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}

通过下面两张《labuladong的算法小抄》图可以明白为什么可以找到环的起始位置。

环形链表 II

环形链表 II

寻找无环单链表的中点

/*
寻找无环单链表的中点
快慢指针,一个块一个慢,块的走到头,慢的刚好在中间
如果是奇数:slow 刚好在中间  ceil(n/2)
如果是奇数:slow 刚好在     n/2
*/
public static ListNode findLinkedListMid(ListNode head){
    ListNode fast=head,slow=head;
    while(fast != null && fast.next != null){
        fast = fast.next.next;
        slow = slow.next;
    }
    return slow;
}

寻找无环单链表的倒数第k个节点

/*
    寻找无环单链表的倒数第k个节点
思路:
    1. 先让快指针走 k 次
    2. 之后快指针和慢指针一步一步next。
    3. 当快指针到达尾部时,慢指针指向倒数第k个元素。

 */
public static ListNode findLinkedListEndk(ListNode head,int k){
    ListNode fast=head,slow=head;
    while(fast != null && k != 0){
        fast = fast.next;
        k--;
    }
    if(fast == null){
        return slow; // 说明链表的长度 刚好为 k。倒数第k个元素,也就刚好是第一个元素
    }
    while(fast != null){
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}

leetcode 19 删除链表的倒数第 n 个结点

leetcode19题 删除链表的倒数第 n 个结点

  • 解法一
/**
* leetcode 19题: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
* 假设链表有K个节点
* 第一个while循环 n 次,
* 第二个while循环 k-n 次
* 时间复杂度为 n+k-n = k
* @param head
* @param n
* @return
*/
public ListNode removeNthFromEnd(ListNode head, int n) {
    // 链表为空, 或者只有一个元素且删除当前节点的情况。
    if(head == null || (head.next == null && n == 1)) {
        head = null;
        return head;
    }

    ListNode fast = head, slow = head;
    while(fast != null && n != 0){
        fast = fast.next;
        n--;
    }

    // 这个条件成立说明,要删除的倒数第n个节点,就是head节点本身,这里直接返回,可以防止后面的程序空指针。
    if(fast == null){
        return head.next;
    }

    // 加上 fast.next != null 是为了将 slow 定位到倒数第 n+1 位置的节点,这样方便单链表删除倒数第n个节点。
    while(fast != null && fast.next != null){
        slow = slow.next;
        fast = fast.next;
    }
    // 删除 slow.next(倒数第n个节点)
    slow.next = slow.next.next;
    return head;
}
  • 解法二
public static ListNode findLinkedListEndk(ListNode head,int k){
    ListNode fast=head,slow=head;
    while(fast != null && k != 0){
        fast = fast.next;
        k--;
    }
    if(fast == null){
        return slow; // 说明链表的长度 刚好为 k。倒数第k个元素,也就刚好是第一个元素
    }
    while(fast != null){
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}

/**
 * leetcode 19题 :解法二,利用上面定义的 findLinkedListEndk 函数 + 虚拟节点(防止空指针)
 */
public ListNode removeNthFromEnd(ListNode head, int n) {
    ListNode dummy = new ListNode(-1);
    dummy.next = head;
    // 获取倒数第n+1个节点
    ListNode x = findLinkedListEndk(dummy,n+1);
    x.next = x.next.next;
    return dummy.next;
}

leetcode 21 合并两个有序链表

leetcode21: 合并两个有序链表

保证合并后依然是升序的

// leetcode 21 合并两个有序链表, 保证合并后依然是升序的。
public ListNode margeTwoLists(ListNode n1 , ListNode n2){
    if(n1 == null || n2 == null){
        return n1 != null ? n1 : n2;
    }

    ListNode temp = new ListNode(-1);
    ListNode p1 = temp;
    while (n1 != null && n2 != null){
        if (n1.val < n2.val){
            p1.next = n1;
            n1 = n1.next;
        }else {
            p1.next = n2;
            n2 = n2.next;
        }
        p1 = p1.next;
    }

    p1.next = (n1 != null ? n1 : n2);
    return temp.next;
}

leetcode 23.合并 k 个有序链表

leetcode23: 合并 k 个有序链表

/**
     * leetcode 23 合并 k 个有序链表
     * @param lists
     * @return
     *
     * 输入:lists = [[1,4,5],[1,3,4],[2,6]]
     * 输出:[1,1,2,3,4,4,5,6]
     * 解释:链表数组如下:
     * [
     *   1->4->5,
     *   1->3->4,
     *   2->6
     * ]
     * 将它们合并到一个有序链表中得到。
     * 1->1->2->3->4->4->5->6
     */
public ListNode mergeKLists(ListNode[] lists) {
    ListNode ans = null;
    // 先写一个合并两个链表的方法, 将两个链表传入,返回合并后的链表 mlist
    // 利用合并后的 mlist 在和 下一个链表, 在进行两个链表的合并。
    // 将问题拆分为多个合并两个链表的问题。
    for (ListNode l:lists) {
        ans = margeTwoLists(ans,l);
    }
    return ans;
}

leetcode 23.合并 k 个有序链表(通过优先级队列)

/*
leetcode 23 合并 k 个有序链表。通过优先级队列:最小堆、小根堆实现合并。
 */
public ListNode margeKListsUsingPriorityQueue(ListNode[] lists){
    if(lists.length == 0) return null;
    // 虚拟头结点
    ListNode dummy = new ListNode(-1);
    ListNode p = dummy;

    // 优先级队列:最小堆、小根堆
    PriorityQueue<ListNode> pq = new PriorityQueue<>(lists.length,(a,b)-> a.val - b.val);
    // 将每个链表的第一个结点加入小根堆。那么堆顶的节点就是值最小的
    for (ListNode l:lists) {
        if(l != null)  pq.add(l);
    }
    while(!pq.isEmpty()){
        // 取出堆顶元素
        ListNode minNode = pq.poll();
        // 加入最终链表
        p.next = minNode;

        // 将当前 minNode 的下一个元素加入 小根堆(也就是k个链表中每次取出的最小值节点 minNode 的下一个节点)
        // 这一步为何要添加,可以通过下面的注释理解
        if(minNode.next != null){
            pq.add(minNode.next);
        }
        p = p.next;
    }
    return dummy.next;
}

/*
具体流程:
二维链表:[[1,4,5],[1,3,4],[2,6]]
第一轮循环 pq 中的元素 1 1 2,利用pq的特性取出 1,加入下一个元素 3
第二轮循环 pq 中的元素 3 1 2,利用pq的特性取出 1,加入下一个元素 4
第三轮循环 pq 中的元素 3 4 2,利用pq的特性取出 2,加入下一个元素 6
第四轮循环 pq 中的元素 3 4 6,利用pq的特性取出 3,加入下一个元素 4
第五轮循环 pq 中的元素 4 4 6,利用pq的特性取出 4,加入下一个元素 5
第六轮循环 pq 中的元素 5 4 6,利用pq的特性取出 4,加入下一个元素:null(不做添加)
第七轮循环 pq 中的元素 5 6,  利用pq的特性取出 5,加入下一个元素:null(不做添加)
第八轮循环 pq 中的元素 6,    利用pq的特性取出 6,加入下一个元素:null(不做添加)
*/

leetcode 86 题分隔链表

分隔链表

/**
 * leetcode 86题分隔链表:
 * 链表中的一个值。要求使用这个值将链表分成两个链表,
 * 所有小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。
 * @param head 单链表
 * @param x 目标值
 * @return
 *
 * 示例:
 * 输入:head = [1,4,3,2,5,2], x = 3
 * 输出:[1,2,2,4,3,5]
 *
 * 输入:head = [2,1], x = 2
 * 输出:[1,2]
 *
 * 思路:
 * 0. 创建两个链表:A与B
 * 1. A 保存值小于 x 的节点(且不改变相对顺序)
 * 2. B 保存大于等于 x 的节点(且不改变相对顺序)
 * 3. A 的尾部链接上B的头部即可
 */
public ListNode partition(ListNode head, int x) {
    // tempLeft 用于存放小于 x 的节点,tempRIght 用于存放大于 x 的节点
    ListNode tempLeft = new ListNode(-1),tempRight = new ListNode(-1);

    ListNode p1 = tempLeft, p2 = tempRight;
    ListNode p = head;
    while(p != null){
        // 注意:这里不能使用 p.val <= x。只保留小于 x 的。
        if(p.val < x){
            p1.next = p;  // 这里赋值为 p 后面需要断开 p.next.
            p1 = p1.next;
        }else {
            p2.next = p;
            p2 = p2.next;
        }
        ListNode temp = p.next;
        p.next = null;
        p = temp;
    }
    // 用 p1 的尾结点,链接tempRight的首节点
    p1.next = tempRight.next;
//        返回tempLeft首节点即可
    return tempLeft.next;
}

Leetcode160 两个链表是否相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

题目数据 保证 整个链式结构中不存在环。

在这里插入图片描述

解法一:这种解法每次都定位到倒数第k个节点,逐步向前比较,只要节点不相等就返回下一个节点(可能是相交的节点,也可能是null代表两个链表不相交)

时间复杂度:O(n^2)

public static ListNode findLinkedListEndk(ListNode head,int k){
    ListNode fast=head,slow=head;
    while(fast != null && k != 0){
        fast = fast.next;
        k--;
    }
    if(fast == null){
        return slow; // 说明链表的长度 刚好为 k。倒数第k个元素,也就刚好是第一个元素
    }
    while(fast != null){
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}

/**
     * Leetcode160 两个链表是否相交
     * @param headA  headB
     */
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    int i = 1;
    ListNode dummy01 = new ListNode(-1);
    ListNode dummy02 = new ListNode(-1);
    dummy01.next = headA;
    dummy02.next = headB;

    ListNode temp01 , temp02;
    while(true){
        // 从倒数第一个开始,逐步向前找节点
        temp01 = findLinkedListEndk(dummy01,i);
        temp02 = findLinkedListEndk(dummy02,i);

        // 节点只要有一个为空, 就说明已经遍历完了,两个链表没有交点
        if(temp01 == null || temp02 == null){
            break;
        }

        // 如果节点不相等,那么他们的下一个就是交点。
        if(temp01 != temp02){
            // 如果没有交点,在倒数第一个节点的 next 就为 null,结果依旧是正确的。
            return temp02.next;
        }
        // 用于控制倒数第i个节点的变量
        i++;
    }
    return null;
}

解法二:

/**
思路:
比如:list1 : [1,2, 3, 8, 4, 6]  len1 = 6 
     list2 : [9,15,	  8, 4, 6]  len2 = 5
二者在8的位置相交
1. 求出len1 与 len2。
2. 	if len1 > len2
		then list1 = list1.next // 执行 len1-len2 步
	if len1 < len2
		then list2 = list2.next // 执行 len2-len1 步
	
	通过上面的两步可以将不同长度的链表指针修改为
	list1 : [1,2, 3, 8, 4, 6]  list1:从2开始
	list2 : [  9,15, 8, 4, 6]  list2:从9开始
	这样二者只需要一起next就可以同时到达 8 ,得到节点有交点,如果没有交点,那就是同时到达 null。
	
	if len1 == len2
		then 两个链表的长度一致,
	
	loop list1 != list2
	 	list1 = list1.next; 
	 	list2 = list2.next;
*/
public ListNode getIntersectionNode(ListNode headA, ListNode headB){
    int lenA = 0, lenB = 0;
    // 计算两条链表的长度
    for (ListNode p1 = headA; p1 != null; p1 = p1.next) {
        lenA++;
    }
    for (ListNode p2 = headB; p2 != null; p2 = p2.next) {
        lenB++;
    }
    // 让较长的链表向前走 |lenA - lenB| 步,与较短的链表到达尾部节点的距离一样长。
    ListNode p1 = headA, p2 = headB;
    if (lenA > lenB) {
        for (int i = 0; i < lenA - lenB; i++) {
            p1 = p1.next;
        }
    } else {
        for (int i = 0; i < lenB - lenA; i++) {
            p2 = p2.next;
        }
    }
    // 看两个指针是否会相同,p1 == p2 时有两种情况:
    // 1、要么是两条链表不相交,他俩同时走到尾部空指针
    // 2、要么是两条链表相交,他俩走到两条链表的相交点
    while (p1 != p2) {
        p1 = p1.next;
        p2 = p2.next;
    }
    return p1;
}

参考

https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/shuang-zhi-0f7cc/
https://leetcode.cn/problemset/all/

刷了一个月LeetCode算法,成功收下了阿里巴巴、字节跳动等大厂的offer 前言 随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目。刷题的网址非常的多,其中以leetcode是最为出名的。 在刷题上,我花了大量的时间,蹚了许多的坑,总结了一下,主要有这三个问题: 刷过的题老是忘,第二次刷的时候还是不会做 刷题的速度很慢,即使花一天时间,也常常只能刷五六道 坚持不下来,老是刷到一半就停滞下来了,当我第二次再来刷的 阅读详情

相关推荐

[原创]Linux 802.11n CSI tool安装教程(亲测可用)

Linux 802.11n CSI tool安装教程 前言 网上关于Intel5300 CSI tool的教程繁多,实际有效的可以说极少,各种疏漏错误。装的时候被坑无数次,终于调通。其实装这个工具并不太难,但是很多人把它弄得极其复杂,所以写这篇博客来帮助和我有一样困扰的人。我基本沿用的是官方文档旧版本的安装方案,针对其冗杂之处做了大量改进。 旧版安装教程: http://dhalperi....

u014645508的博客 4万+

leetcode典型链表题

leetcode链表类型题基本解法

qq_67503717的博客 284

MTK 人工智能生态系统 <一> 简介

Neuropilot

New_Tank的博客 3494

Leetcode:链表刷题(7道经典题目)

Leetcode:链表刷题 列出了一些关于链表的经典题目,并提供了对应的题解。主要是用C++实现的。对于使用其他语言的童鞋,可以很好的迁移过去。

一起加油~ 2017

人工智能训练师认证教程(5)使用MONAI进行医学影像分析的完整指南

本文介绍了使用MONAI框架进行医学影像分析的全流程。首先详细说明了环境搭建步骤,包括PyTorch和MONAI的安装配置。然后以肺部CT 3D分割为例,分步骤讲解了数据准备与预处理、3D UNet模型构建、训练配置(DiceLoss损失函数、Adam优化器等)以及训练验证循环的实现。文章还包含推理可视化方法和模型导出为ONNX格式的部署方案,并强调了医学影像分析中的数据格式适配、强度归一化、显存优化等关键注意事项。最后指出MONAI的医学专用组件可大幅简化开发流程,建议后续可探索SwinUNETR等进阶方

华为开发者布道师,天府英才计划,致力于大数据+AI 的应用创新,助力企业与个人AI创新赋能。 1208

紫光同创PGL50H开发板实战:盘古50KN网口板的高速通信与数据处理

本文详细介绍了紫光同创PGL50H开发板(盘古50KN网口板)在高速通信与数据处理领域的实战应用。文章从开箱、核心芯片解析、开发环境搭建入手,重点讲解了如何配置与测试其8路千兆以太网接口和SFP光纤接口,并深入探讨了FPGA与DDR3协同进行多路数据汇聚处理的系统架构与调试方法,为网络通信与高速数据处理系统开发提供了宝贵的实践经验。

weixin_28256233的博客 452

【数据结构】10道经典面试题目带你玩转链表

10道关于链表的经典面试题目:包含移除链表元素,反转链表,链表的中间结点,链表中倒数第K个结点,合并两个有序链表,链表分割,链表的回文结构,相交链表,环形链表,环形链表找入环点等题目的解题思路图解及完整解题代码.

C/C++领域,数据结构,linux,MySQl学习者 2379

ROS+Gazebo仿真入门:用TurtleBot3模拟扫地机器人全流程

本文详细介绍了如何利用ROS和Gazebo仿真平台,以TurtleBot3 Waffle Pi模型为核心,从零搭建并运行一个虚拟扫地机器人的全流程。内容涵盖仿真环境搭建、世界与机器人模型解析,并重点演示了SLAM建图、自适应蒙特卡罗定位以及全局与局部路径规划等核心算法实战,为机器人算法开发与验证提供了高效、低成本的解决方案。

sre5engineer的博客 1087

leetcode链表面试题目集锦

本文系转载,出处信息 作者:Mr希灵 链接:https://www.jianshu.com/p/f0c3235369ac 來源:简书 1.链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。 1.1定义 链...

xiangxianghehe的博客 1万+

28、沉浸式体验技术:概念、类型与应用

本文全面介绍了沉浸式体验技术的概念、类型与应用。从双边滤波器的图像处理原理切入,系统阐述了VR、AR、MR、ER及数字孪生等核心技术的特点与区别,并通过丰富案例展示了其在商业、医疗、教育、旅游、房地产、物流等多个领域的实际应用。文章还分析了技术融合趋势、硬件升级方向、应用场景拓展潜力,同时探讨了数据处理、网络延迟、隐私安全等挑战及应对策略,最后以流程图和对比表格总结技术发展脉络,展望沉浸式技术推动社会进步的广阔前景。

wind6的博客 380

《测控仪器设计课后习题答案-浦昭邦-王宝光

《测控仪器设计课后习题答案-浦昭邦-王宝光 1.1. 测控仪器的概念是什么? 测控仪器则是利用测量和控制的理论,采用机、电、光各种计量测试原理及控制系统与计算机相结合的一种范围广泛的测量仪器。 1.2. 为什么说测控仪器的发展与科学技术发展密切相关? 仪器仪表的用途和重要性— 遍及国民经济各个部门,深入到人民生活的各个角落,仪器仪表中的计量测试仪器与控制仪器统称为测控仪器,可以说测控仪器的水平是科学技术现代化的重要标志。 仪器仪表的用途: 在机械制造业中:对产品的静态与动态性能测试;加工过程的控制与监测;设

无名何许人的博客 2976

leetcode刷题day3:链表题目集合

day1 任务以及具体安排:第一章 数组part01day 2 任务以及具体安排:第一章 数组part02题目链接/文章讲解/视频讲解::代码随想录如何移除元素:第一步是找到他的上一个元素,然后将这个元素的next属性变成current.next.next,也就是跳过我们要删除的元素。这里用到一个技巧,即虚拟头结点。这样就可以用 某某.next表示所有元素,包括第一个元素。返回的时候注意去掉虚拟头即可 def removeElements(head, val): fix_head = Lis

weixin_59518581的博客 262

2025年下半年网络工程师案例分析真题及答案解析

2025年下半年网络工程师案例分析真题及答案解析

鹿鸣天涯 1088

LeetCode热题100(二十五)——141.环形链表

【代码&解析】LeetCode热题100(二十五)——141.环形链表

Young_4的博客 1031

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

刷了一个月leetcode算法,成功收下阿里巴巴、网易等大厂的offer

随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目。刷题的网址非常的多,其中以leetcode是最为出名的。 在刷题上,我花了大量的时间,蹚了许多的坑,总结了一下,主要有这三个问题:

老男孩的架构路 444

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lecode 刷题知识点

在算法刷题中必备的基本知识点,

weixin_46260579的博客 2302

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Leetcode 刷题记录 07 —— 链表

本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答。

Celeste的博客 1197

力扣刷题DAY1(链表/简单)

相交链表和反转链表

m0_74803856的博客 588

【java API】leetcode常用刷题API及ACM模式

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。掌握这些API和技巧后,可以高效解决栈和链表相关的算法题,注意边界条件和指针操作的细节!输入的数据为:runoob com。可以看到 com 字符串并未输出。输入的数据为:runoob。

ChanceZhou的博客 2319

LeetCode 160. 相交链表 - 双指针与哈希集合详解

题目描述:给定两个单链表的头节点 headA 与 headB,若两链表在某个节点相交,返回相交的起始节点;若不相交,返回 null。链表结构可能有不同长度,且相交后共享同一条后缀。原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/难度等级:Easy相关标签:链表、双指针、哈希表| 解法 | 时间复杂度 | 空间复杂度 | 优点 | 缺点 | 适用场景 |

m0_52114506的博客 665

临时抱佛脚之leetcode刷题笔记

自用自用自用! 933 最近的请求次数 在迭代列表的时候删除元素,会导致index跳过一个,会有漏掉没有被遍历的元素,因此在迭代列表的时候删元素要从尾部往前面删。 for i in range(len(l)-1,-1,-1): operate() # 就像这样 同时933的思想是把不符合条件的元素删除,这样直接返回符合条件的元素个数就可以了! 225 用队列实现栈 双队列实现栈的思想是:最新元素进q2(最新元素要保持在队头),把q1(顺序是栈的顺序!)的元素依次出队到q2,交换q2和q1。 622 设计

Taunzi的博客 1116

LeetCode刷题进阶之环形链表 II (142)

一、题目 演示示例: 二、测试代码 //方法一 快慢指针 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public Lis

qq_44111805的博客 176

刷了三个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer

写着写着就发现要想总结到位是一项非常庞大的工程,路漫漫其修远兮,吾将上下而求索。我个人认为,作为技术人就要保持终生学习的态度,让学习力成为核心竞争力,才能不被时代所淘汰,而高效的时间支配能让你变得更加优秀,所以,我在这里将这份耗时两个月搜集的算法刷题书籍,送给有需要的人《算法的乐趣》《算法》《算法刷题 Leetcode 版》我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【07】即可免费获取。...

wadfdhsajd的博客 379

力扣刷题常用方法与 ACM 模式输入输出速查(Python 版)

Python基础补牢,不涉及算法,供大家快速查漏补缺

m0_65217767的博客 223

嵌入式暑假包装-第十一天

这题思路:可以通过设置滑动窗口为p.size位,然后对比滑动窗口里的元素是不是全都等于异位词里的元素,如果是就比较顺序,如果顺序不对,那么动态数组记录索引left;然后把right的值输入进这个窗口里,这里注意顺序,因为循环设计擦去窗口内元素,所以要先写擦去再写插入,就不会把最开始的0号元素去除了。这题我想的思路是倒数第n个几点正着数就是单链表的第size-n个数嘛,所以直接就找到这个点之前的和之后的连接,然后返回头节点。如果找到了,就执行循环。原来是这样,_set和_map是C++的两个不同的容器。

weixin_48163448的博客 1510
上一篇: 【JUC(二)】Java中的同步与锁
下一篇: 【JUC(三)】中断与等待唤醒
种花途。
博客等级 码龄10年 3粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值