Java如何实现单链表SingleLinkedList增删改查及反转、逆序等操作
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章给大家分享的是有关Java如何实现单链表SingleLinkedList增删改查及反转、逆序等操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。节点类可以根据需要,
千家信息网最后更新 2024年11月19日Java如何实现单链表SingleLinkedList增删改查及反转、逆序等操作
这篇文章给大家分享的是有关Java如何实现单链表SingleLinkedList增删改查及反转、逆序等操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
节点类
可以根据需要,对节点属性进行修改。注意重写toString()
方法,以便后续的输出操作。
//节点类class Node { public int id; public String name; public Node next; public Node(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Node{" + "id=" + id + ", name='" + name + '\'' + '}'; }}
链表类(主要)
所实现的增删改查,反转,逆序等功能基本能适用。实现思路在代码中注释。
//链表类(管理节点)class LinkedList { //头节点 Node head = new Node(0,null); //链表有效数据个数(链表长度)(头节点不计) public int size(){ Node temp = head; int size = 0; while (true){ if (temp.next == null){ break; } size++; temp = temp.next; } return size; } //展示链表 public void list(){ if (head.next == null){ System.out.println("链表为空!"); return; } Node temp = head.next; while (true){ if (temp == null){ break; } System.out.println(temp); temp = temp.next; } } //增(根据id从小到大) public void add(Node newNode){ Node temp = head; while (true){ //用来找到链表尾 if (temp.next == null) { break; } if (temp.id == newNode.id){ System.out.println("要添加的节点的id已经存在,添加失败!"); return; } if (temp.next.id > newNode.id){ break; } temp = temp.next; } Node node = newNode; newNode.next = temp.next; temp.next = node; } //删(根据id匹配删除) public void remove(int id){ if (head.next == null){ System.out.println("链表为空!"); return; } Node temp = head; boolean flag = false; //用来标记是否找到对应id的节点 while (true){ if (temp.next == null){ break; } if (temp.next.id == id){ //找到要删除节点的前一个节点 flag =true; break; } temp = temp.next; } if (flag){ temp.next = temp.next.next; }else { System.out.println("没有找到要删除的节点,删除失败!"); } } //改(根据id匹配要修改的节点) public void update(int id,String name){ if (head.next == null){ System.out.println("链表为空!"); return; } Node temp = head; boolean flag = false; //用来标记是否找到对应id的节点 while (true){ if (temp.next == null){ break; } if (temp.id == id){ flag = true; break; } temp = temp.next; } if (flag){ temp.name = name; }else { System.out.println("没有找到要修改的节点,修改失败!"); } } //查(根据id匹配) public Node show(int id){ if (head.next == null){ System.out.println("链表为空!"); return null; } Node temp = head.next; boolean flag = false; while (true){ if (temp == null){ break; } if (temp.id == id){ flag = true; break; } temp = temp.next; } if (flag){ return temp; }else { System.out.println("没有找到要查找的节点,查找失败!"); return null; } } //查找倒数第n个节点 public Node lastShow(int n){ Node temp = head.next; int size = this.size(); if (size < n || n <= 0){ System.out.println("查找的节点不存在!"); return null; } for (int i = 0; i < size - n; i++) { temp = temp.next; } return temp; } //链表反转 public void reverse(){ if (head.next == null || head.next.next == null){ return; } Node reverseHead = new Node(0,null); Node cur = head.next; //记录当前遍历到的节点 Node next = null; //记录当前遍历到的节点的下一个节点 while (true){ if (cur == null){ //确保遍历到最后一个 break; } next = cur.next; //保存下一个节点,避免断链 //使得反转头节点指向遍历到的当前节点,而让遍历到的当前节点指向反转头节点的下一个节点 // 确保遍历到的当前节点始终位于反转头节点的下一个 cur.next = reverseHead.next; reverseHead.next = cur; //遍历 cur = next; } head.next = reverseHead.next; //最后让原头节点指向反转头节点的下一个节点,即可实现原链表的反转 } //逆序打印 //方法一:先反转 //方法二:使用栈结构 public void reversePrint(){ if (head.next == null){ System.out.println("链表为空!"); return; } Stacknodes = new Stack<>(); Node temp = head.next; while (true){ if (temp == null){ break; } nodes.push(temp); temp = temp.next; } while (nodes.size() > 0){ System.out.println(nodes.pop()); } }}
测试类
import java.util.Stack;/** * @Author: Yeman * @Date: 2021-10-14-12:55 * @Description: *///测试类public class SingleLinkedListTest { public static void main(String[] args) { LinkedList linkedList = new LinkedList(); Node node1 = new Node(1, "阿兰"); Node node2 = new Node(2, "洛国富"); Node node3 = new Node(3, "艾克森"); //可以不按照id顺序添加 linkedList.add(node1); linkedList.add(node3); linkedList.add(node2); linkedList.list(); System.out.println(linkedList.size()); //链表长度// System.out.println(linkedList.lastShow(2)); //倒数查找// linkedList.update(2,"张玉宁"); //改//// linkedList.remove(3); //删//// System.out.println(linkedList.show(2)); //查// linkedList.reverse(); //链表反转 linkedList.reversePrint(); //逆序打印 }}
感谢各位的阅读!关于"Java如何实现单链表SingleLinkedList增删改查及反转、逆序等操作"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
节点
逆序
指向
方法
内容
更多
标记
篇文章
长度
测试
不错
实用
有效
从小到大
个数
从小
代码
功能
属性
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
会危害网络安全的行为是什么
工业控制网络技术课后答案第六章
阿里云服务器不能联网
江苏融集网络技术有限公司
青海紫鑫山软件开发有限公司
轻量级应用服务器平台
数据库分页存储过程
网络安全体系中
泰山路街道软件开发培训
湖南pdu服务器电源哪个牌子好
论文数据库表查重吗
戴尔服务器默认ip
vb6保存图片到数据库
信息网络安全相关文件
贵州任务态势系统软件开发
计算机网络技术推荐软件
json如何导入数据库中
手游龙之谷服务器爆满
汉达软件开发
判断输入值是否为少数民族数据库
人形检测数据库漏洞检测
小程序搭建文件服务器
db2 数据库过期
网络安全责任考核方案
国外网络安全法借鉴
数据库改一个字段的类型
js 服务器 倒计时
北京飞译网络技术有限公司
京东商智怎么看指数数据库
网络软件开发研究