数据结构知识点 -- 链表(Java实现)
持续更新
文章目录
- 简单题
- 1. 反转链表
- 2. 合并有序数列
- 3. 判断链表中是否有环
- 4. 链表排序
- 5. 判断一个链表是否为回文结构
- 6. 两个链表的第一个公共点
- 7. 删除有序链表中重复的元素
简单题
1. 反转链表
输入:[ 1 2 3]
输出: [ 3 2 1]
public class Solution {public ListNode ReverseList(ListNode head) {// 利用指针if(head == null) return null;ListNode pre = null;ListNode next = null;while(head != null){next = head.next;head.next = pre;pre = head;head = next;}return pre;}
}
2. 合并有序数列
输入 : {2},{1}
输出:{1,2}
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {public ListNode mergeTwoLists (ListNode l1, ListNode l2) {if(l1 == null) return l2;if(l2 == null) return l1;// 创建头结点,指向0ListNode head = new ListNode(0);ListNode temp = head;while(l1 != null && l2 != null){if(l1.val > l2.val){temp.next = l2;l2 = l2.next;}else{temp.next = l1;l1 = l1.next;}temp = temp.next;}// 判断是否遍历结束temp.next = (l1 == null)? l2:l1;// 头结点是0return head.next;}
}
3. 判断链表中是否有环
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-67B3cPuf-1623758646111)(https://www.nowcoder.com/equation?tex=O(1)]%5C)的解法么?
解题思路 - HashSet
import java.util.*;
/*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public boolean hasCycle(ListNode head) {if(head == null) return false;Set<ListNode> set = new HashSet<>();ListNode tmp = head;while(tmp!=null){if(set.contains(tmp)){return true;}set.add(tmp);tmp = tmp.next;}return false;}
}
4. 链表排序
给定一个无序单链表,实现单链表的排序(按升序排序)。
输入:
输入 :[1,3,2,4,5]
返回值 :{1,2,3,4,5}
解题思路 : ArrayList
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {/*** * @param head ListNode类 the head node* @return ListNode类*/public ListNode sortInList (ListNode head) {// write code hereif(head==null) return null;ArrayList<Integer> list = new ArrayList<>();//将单链表中的数据放入arraylist中ListNode tmp = head;ListNode res = head;int n=0; // 记录数组的长度while(tmp!=null){n++;list.add(tmp.val);tmp = tmp.next;}// 排序Collections.sort(list);// 取出for(int i=0; i<n; i++){res.val = list.get(i);res = res.next;}return head;}
}
5. 判断一个链表是否为回文结构
给定一个链表,请判断该链表是否为回文结构。
输入 :[1 2 2 1]
返回值 :true
- 回文结构 -
- 解题思路 - 栈(先进后出)
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {/*** * @param head ListNode类 the head* @return bool布尔型*/public boolean isPail (ListNode head) {// write code hereif(head==null) return false;Stack<Integer> stack = new Stack<>();ListNode tmp = head;// 将数值压入栈while(tmp!=null){stack.push(tmp.val);tmp = tmp.next;}// 取出栈顶,去head元素进行比较while(head!=null){if(head.val != stack.pop()){return false;}head = head.next;}return true;}
}
6. 两个链表的第一个公共点
输入两个无环的单链表,找出它们的第一个公共结点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oC10YYj-1623758646116)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20210615191432615.png)]
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {if(pHead1==null || pHead2==null) return null;ListNode p1=pHead1;ListNode p2=pHead2;while(p1!=p2){p1=p1.next;p2=p2.next;if(p1!=p2){if(p1==null) p1 = pHead2;if(p2==null) p2 = pHead1;}}return p1;}
}
7. 删除有序链表中重复的元素
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
输入 :{1,1,2}
返回值 :{1,2}
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {/*** * @param head ListNode类 * @return ListNode类*/public ListNode deleteDuplicates (ListNode head) {// write code hereif(head==null) return head;ListNode tmp = head;while(tmp.next != null){if(tmp.val == tmp.next.val){tmp.next = tmp.next.next;}else{tmp = tmp.next;}}return head;}
}
数据结构知识点 -- 链表(Java实现)相关推荐
- 数据结构之链表(java语言实现)
链表的底层储存结构: 相对于数组这一需要连续.足够大空间的数据结构,链表只需要利用"指针"将一组零碎的空间(在链表中称之为节点)串联起来,这样就可以避免在创建数组时一次性申请过大的 ...
- 数据结构之链表Java
1.链表定义 public class LNode {//1.单链表结点定义(链表=节点->节点->节点->节点->... 节点=数据域+节点域)public int data ...
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素
Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...
- java城市链表_数据结构城市链表 1. 城市链表
[问题描述]将若干城市的信息 联合开发网 - pudn.com...
数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明: 1. 城市链表 [问题描述 ...
- Java数据结构之链表(单链表)
文章目录 一.链表 概念 结构 二.无头单链表 图解 代码实现 特点 三.带头单链表 为何引入带头单链表 代码实现 注意 提示:以下是本篇文章正文内容,Java系列学习将会持续更新 一.链表 概念 链 ...
- 浅谈:数据结构之单链表,java代码演示单链表
单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 数据结构之 链表( 单链表, 双链表,循环链表)
前篇.链表的概括 1.链表(Linked list)说明 是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按 ...
最新文章
- Microsoft Visual Studio 2005 简体中文专业版(DVD)下载地址
- 【整理总结】Visual Studio 扩展和更新
- 提高网站访问速度的34条军规(2)
- iOS之深入解析dispatch source的原理与功能
- java提取多行嵌套div/div内容的正则表达式_提取某一段div标签之间内容的正则表达式怎么写...
- 计算机x线影像ppt,计算机X线摄影ppt课件
- VMware ESXi 环境备份与还原处理案例
- 安卓交叉编译环境配置
- 1022. Genealogical Tree(topo)
- 遥感数据下载——土地利用(覆盖)数据下载
- 谷歌浏览器无法登陆_论坛上传图片后自动退出登陆?你不是一个人,原因及解决方法来了...
- linux添加jdk权限不够
- Tomcat中temp文件夹出现项目副本问题的解决方法
- 允许用户使用 MAK 密钥激活 Office 2010 批量许可版
- 在iOS7中修改键盘Return键的类型
- IDEAR 上传git出现的一系列错误
- CF1463F Max Correct Set(取小样法+状压 DP)
- 监控io性能、free命令、ps命令、查看网络状态、linux下抓包
- linux打开xml文件,xml文件扩展名,xml文件怎么打开?
- 配置Cross-Origin的几种方法
热门文章
- 未转变者DLC皮肤在服务器,未转变者 steam上 最新的版本 肿么联机?肿么创建房间...
- ERP主要软件品牌对比
- 【区块链 | Polygon】Polygon区块链PHP开发包-使用PHP语言开发Polygon
- [PLC]ST语言一:LD_LDI_AND_ANI_OR_ORI
- 【云周刊】第135期:云栖大会珍贵技术资料:20+覆盖容器技术、智能工业、大数据、开源数据库...
- 未来共享出行自动驾驶安全威胁预测
- 数据结构第二次实验-赫夫曼编码及其应用
- Kubernetes安装与卸载
- 【腾讯TMQ】WIFI安全测试,其实不难
- 个体工商户核名查询_网上核名怎么查询