数据结构之多个链表问题

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法 全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法 阅读详情

在数据结构中链表成了我们常见的一种形式,链表的内容学习起来比较绕,学者容易和C语言中的数组或者指针进行混淆,下面列出几道关于链表的习题供大家参考。

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。

源代码

public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        // < x
        ListNode less = null;
        ListNode lessLast = null;
        
        // >= x
        ListNode great = null;
        ListNode greatLast = null;
        
        ListNode cur = pHead;
        while (cur != null) {
            if (cur.val < x) {
                if (less == null) {
                    less = cur;
                } else {
                    lessLast.next = cur;
                }
                lessLast = cur;
            } else {
                if (great == null) {
                    great = cur;
                } else {
                    greatLast.next = cur;
                }
                greatLast = cur;
            }
                
            cur = cur.next;
        }
        
        if (less == null) {
            return great;
        } else {
            lessLast.next = great;
            if (greatLast != null) {
                greatLast.next = null;
            }
            
            return less;
        }
    }
}

2.

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个

中间结点。

class Solution {
    private int getLength(ListNode head) {
        int len = 0;
        for (ListNode cur = head; cur != null; cur = cur.next) {
            len++;
        }
        
        return len;
    }
    public ListNode middleNode(ListNode head) {
        int len = getLength(head);
        int midLen = len / 2;
        ListNode node = head;
        for (int i = 0; i < midLen; i++) {
            node = node.next;
        }
        
        return node;
    }
}

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        
        while (fast != null) {
            fast = fast.next;
            if (fast == null) {
                break;
            }
            slow = slow.next;
            fast = fast.next;
        }
        
        return slow;
    }
}

3.输入一个链表,输出该链表中倒数第k个结点。

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        int len = 0;
        for (ListNode c = head; c != null; c = c.next) {
            len++;
        }
        
        if (len < k) {
            return null;
        }
        
        int steps = len - k;
        ListNode r = head;
        for (int i = 0; i < steps; i++) {
            r = r.next;
        }
        
        return r;
    }
}

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode front = head;
        ListNode back = head;
        
        for (int i = 0; i < k; i++) {
            if (front == null) {
                return null;
            }
            front = front.next;
        }
        
        while (front != null) {
            back = back.next;
            front = front.next;
        }
        
        return back;
    }
}

4.把两个链表进行合并,并让他们进行有序排列。

public class PalindromeList {
    public ListNode getMid(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        
        while (fast != null) {
            fast = fast.next;
            if (fast == null) {
                break;
            }
            fast = fast.next;
            slow = slow.next;
        }
        
        return slow;
    }
    
    public ListNode reverse(ListNode head) {
        ListNode result = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode next = cur.next;
            
            cur.next = result;
            result = cur;
            
            cur = next;
        }
        
        return result;
    }
    
    public boolean chkPalindrome(ListNode A) {
        ListNode mid = getMid(A);
        ListNode h2 = reverse(mid);
        ListNode n1 = A;
        ListNode n2 = h2;
        while (n1 != null && n2 != null) {
            if (n1.val != n2.val) {
                return false;
            }
            
            n1 = n1.next;
            n2 = n2.next;
        }
        
        return true;
    }
}

5.删除指定的所有结点

public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
		if (pHead == null) {
			return null;
		}
		
		ListNode prev = null;
        ListNode p1 = pHead;
        ListNode p2 = pHead.next;
        
        while (p2 != null) {
            if (p1.val != p2.val) {
                prev = p1;
                p1 = p2;
                p2 = p2.next;
            } else {
                while (p2 != null && p2.val == p1.val) {
                    p2 = p2.next;
                }
                
                if (prev == null) {
                    pHead = p2;
                } else {
                    prev.next = p2;
                }
                p1 = p2;
                if (p2 != null) {
                    p2 = p2.next;
                }
            }
        }
            
        return pHead;
    }
}

希望会对大家有帮助,有什么错误问题,还望大家指正。

DataCastle-租金预测 ID:编号;时间:房屋信息采集的时间;小区名:房屋所在小区,已脱敏处理;小区房屋出租数量:小区出租房屋数量,已脱敏处理;楼层:0、1、2分别表示楼层低,中,高;总层数:房屋所在建筑的总楼层数,已脱敏处理;房屋面积:房屋面积数值,已脱敏处理;房屋朝向:房屋的朝向;居住状态:房屋的居住状态,表示是否已出租或居住中,已脱敏处理;卧室数量:户型信息,数字表示卧室的个数;卫的数量:户型信息,数字表示卫生间的个数;厅的数量:户型信息,数字表示厅的个数; 阅读详情

相关推荐

简化神经元模型6 -- Hindmarsh-Rose Model

简化神经元模型 6 Hindmarsh-Rose Model

weixin_73557167的博客 1426

链表的通用数据结构

在日常开发中,经常会使用到链表,链表上承载的数据不同,链表的数据结构定义也会随之变化。本文讨论如何定义一个通用的链表结构。 1. 在链表节点中定义前向指针或后向指针。 每次都需要重新定义链表的结构,重新定义对链表的操作。这是最传统的、最简单的方法。 2. 使用宏简化链表的定义和操作。 将常用的定义封装成宏定义,减少冗余代码。 单链表的指针结构定义如下所示,使用时需要将LIST_ENTRY...

sunwenlong2000的博客 471

AI提示词设计中的批判性思维训练方法

在人工智能应用中,提示词(prompt)设计是影响生成内容质量的关键因素。通过引入批判性思维框架,可以有效提升AI输出的逻辑性和多样性。该方法基于目的澄清、证据评估、假设检验和多视角分析四大支柱,构建结构化的问题拆解和证据链。在学术论文辅助写作、商业决策模拟等场景中,这种训练方式能显著提高内容质量,特别适合学生、职场人士和内容生产者。结合思维可视化工具和本地知识库,可以实现从基础应用到专家级分析的进阶。

weixin_33624741的博客 228

算法之合并多个有序链表

合并多个有序数组

Ethan_199402的博客 864

MAX96717实战:如何选择Host-to-Peripheral和Pass-Through I2C模式?附配置代码

本文深入解析MAX96717芯片的两种关键I2C模式:Host-to-Peripheral与Pass-Through。通过对比其核心差异、硬件连接考量及软件配置代码,为嵌入式开发者提供了清晰的模式选择策略与实战指南,帮助优化系统设计并避免常见通信故障。

weixin_29190573的博客 460

C#上位机与OneNET云平台数据交互实战——基于HTTP与JSON解析

本文详细介绍了使用C#开发上位机软件与OneNET物联网云平台进行数据交互的实战方法。通过构建HTTP请求、解析JSON数据,实现设备数据的实时获取、界面展示与本地存储,为工业监控与数据采集提供了一套完整高效的C#解决方案。

kkk56的博客 218

【数据结构】链表

C语言实现单链表、带头循环链表

ikun66666的博客 2809

从零搭建自动驾驶仿真环境:我的Nuplan-devkit实战笔记(含PyCharm配置技巧)

本文详细记录了从零搭建Nuplan-devkit自动驾驶仿真环境的完整流程,包括conda环境配置、pip版本控制、PyCharm专业版集成等关键步骤。特别针对Ubuntu系统下的依赖管理、数据目录优化和性能调优提供了实用技巧,帮助开发者高效构建稳定的自动驾驶仿真开发环境。

weixin_30505225的博客 479

链表

链表 链表是根据元素节点逻辑关系排列起来的一种数据结构,和数组类似,都可以保存多个数据。每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的数据),一个是引用域 (储存下一个节点或者上一个节点的地址)。链表在物理存储单元上非连续、非顺序。 链表的种类 单项链表:每一链表节点的引用域只指向下一节点; 双向链表:每一节点中有两个引用域,分别指向上一节点和下一节点; 环形链表:链表最后一节点的引用域指向头节点; 双向环形链表:每一节点中有两个引用域,分别指向上一节点和下一节点,其中链表最后一

cynthiahunter的博客 775

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 914

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1859

链表:自引用结构

链表: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作。 例: #include typedef struct student {

和光official的博客 1296

RT-Thread littefs控制GD32F4xx片内Flash

GD32F4xx RT-Thread下使用littefs 控制片内flash 调试记录

madao1234的博客 995

数据结构刷题-链表

1,双指针比如翻转链表,环形链表,删除倒数第n个节点;相交链表;链表题目是把双指针发挥利用到极致的题目,因为只能一步一步遍历,没有办法。2,虚拟头结点;合并有序链表(虚拟头+双指针)链表的一大问题就是操作当前节点必须要找前一个节点才能操作。这就造成了,头结点的尴尬,因为头结点没有前一个节点了。每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题。3,排序问题:排序算法其实排序链表,基本上就算是数组排序的变种吧,感觉差别不是很大。

Alexa_的博客 1430

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据结构考研真题——单链表

本人总结了各个高校数据结构历年考研真题,供大家参考使用 1.(2015年全国硕士研究生计算机考研真题)用单链表保存m个整数,节点的结构为(data,link),且|data|<n(n为正整数)。现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节点而删除其余绝对值相等的节点。< p=""></n(n为正整数)。现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节点而删除其余绝对值相等的节点。<>

qq_43802706的博客 4153

怀旧版电脑GBC模拟器

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

数据结构:双向链表(3)

本文介绍了四种链表经典算法题的解题思路和实现方法:1. 链表的中间节点 - 使用快慢指针法(时间复杂度O(n),空间复杂度O(1));2. 合并两个升序链表 - 通过双指针比较和拼接(时间复杂度O(m+n));3. 链表分割 - 创建两个子链表分别存储小于x和大于等于x的节点;4. 链表回文结构 - 将链表值存入数组后使用双指针验证。文章详细解析了每种算法的核心思路、代码实现和复杂度分析,重点讲解了快慢指针、双指针比较等链表操作技巧,适用于理解链表操作的核心思想。

2401_86982201的博客 1534

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 数据结构与算法之链表

序 作为一种基本数据结构,链表(Linked List)是一种物理存储单元上非连续的存储结构,元素的逻辑顺序是通过链表的指针来实现的。这种存储方式使链表具备插入数据复杂度 O(1) 查找复杂度 O(n) 的特性。链表一般分为三种:单向链表、双向链表、循环链表。 一、单向链表 单向链表是一种线性表,由节点(ListNode)组成,节点是由存储的对象(object)以及对下一个节点的引用(nex...

大魔王的博客 332

链表问题汇总

目录一、链表0、链表结构定义1、leetcode2: 两数之和2、leetcode19: 删除倒数第N个节点3、leetcode21: 合并两个排序链表4、leetcode23: 合并k个有序连表5、leetcode24: 交换相邻节点6、leetcode25: k个一组反转连表7、leetcode61: 将链表往后旋转k位8、leetcode82: 删除排序链表中所有重复节点【易错】9、leetcode83: 删除排序链表中的重复节点【重复节点只保留一个】10、leetcode86: 分割链表【=x的在

qq_41644412的博客 782

数据结构 链表常见算法问题(一)

数据结构,线性表,链表常见算法 算法和问题来自于试卷,辅导书,以及网络。 //顺序表的一般数据结构 typedef struct LNode{ int data; struct Lnode *next; }LNode,*LinkList; 算法2.2.1 设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点 分析:略 bool deleteX(LinkList &L,int x) { LinkList *p; if(L==NULL) return 0; else if

qq_43128902的博客 693

SDUT|数据结构实验二 链表

例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表进行就地逆置(不增加新结点),并输出逆置后的单链表数据。每组测试数据的输出占1行。

2402_87659239的博客 813

链表的经典问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

qq_43229360的博客 321

数据结构——链表&用单项链表解决约瑟夫问题

数据结构——链表&用单项链表解决约瑟夫问题

祖国栋梁一的博客 953

数据结构java单链表_数据结构(一) 单链表的实现-JAVA

数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构这门课程把。-WZY一、单链表的概念链表是最基本的数据结构,其存储的你原理图如下图所示上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据...

weixin_39802969的博客 281

数据结构-单向链表

数据结构:用来组织和存储数据程序设计 = 数据结构 + 算法。

2401_88842309的博客 1004

链表问题的解题思路

链表刷题经历2022.4.30 2022.4.30 leetcode206 反转链表 解题思路:利用双指针,对要反转的链表定义一前一后两个指针pre和cur,反复迭代。 leetcode92 反转链表Ⅱ 与Ⅰ的区别:反转指定的两个下标之间的链表 解题思路:利用双指针,对要反转的链表定义一前一后两个指针rpe和cur,让两个指针分别指向要反转的部分链表的头节点和尾节点,利用Ⅰ的思路反转中间部分。 leetcode160 相交链表 解题思路:利用双指针,一个指针p1从A开始遍历,遍历到null之前则转而

weixin_44446626的博客 469

合并两个及以上有序链表问题

准备一个小根堆,并把每个链表的头节点加入到小根堆中,此时,小根堆堆顶弹出的节点一定是最后生成链表的头节点。指针,谁小,谁就接入进来。,则说明这个节点所在链表已处理完毕,可以直接弹出堆中下一个节点。比堆顶元素小,则直接不需要进入堆顶,作为结果链表下一个位置;的第一个元素,谁小,谁就是最后要返回的链表的头节点,如果。第二步,从小根堆堆顶弹出一个元素,作为最后链表的头节点;这样,我们就设置好了要返回链表的头节点,假设头节点是。第三步,第二步中弹出节点所在的链表,假设是。比堆顶元素大,则堆顶元素弹出,

Practitioner 357
上一篇: 数据结构之线性表 顺序表 链表
下一篇: 数据结构之链表相交问题
王翔乐
博客等级 码龄8年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值