使用java代码模拟单链表的增删改以及排序功能

代码如下:

package com.seizedays.linked_list;

public class SingleLinkedListDemo {//  主方法
public static void main(String[] args) {
HeroNode node1 = new HeroNode(1, "宋江", "及时雨");
HeroNode node2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode node3 = new HeroNode(3, "吴用", "智多星");
HeroNode node4 = new HeroNode(4, "林冲", "豹子头");
HeroNode node5 = new HeroNode(3, "李逵", "黑旋风"); SingleLinkedList list = new SingleLinkedList(); // list.add(node1);
// list.add(node2);
// list.add(node3);
list.addByOrder(node1);
list.addByOrder(node3);
// list.addByOrder(node5);
list.update(node5);
list.addByOrder(node2);
list.addByOrder(node4); list.delete(5); list.showList();
}
} //定义SingleLinkedList管理结点
class SingleLinkedList {
//先初始化一个头节点,头节点不动 不存放数据
private HeroNode head = new HeroNode(0, "", ""); //1.添加节点到单向列表
// 不考虑编号顺序时候 将最后节点的next指向新的节点
public void add(HeroNode heroNode) {
//temp用于辅助遍历
HeroNode temp = head;
//找到最后
while (temp.next != null) {
//找到链表的最后 跳出
temp = temp.next;
} //当退出while循环时候 temp指向链表的最后
temp.next = heroNode;
} // 2.按照编号大小有规律地将节点插入链表
public void addByOrder(HeroNode heroNode) {
//通过辅助节点遍历来找到添加的位置
HeroNode temp = head; while (temp.next != null) {
if (heroNode.no == temp.next.no){
System.out.printf("编号%d已经存在,不能加入\n", heroNode.no);
return;
}
if (heroNode.no < temp.next.no) {
heroNode.next = temp.next;
temp.next = heroNode;
return;
}
temp = temp.next; }
temp.next = heroNode;
} //3.根据编号来修改节点的信息
//根据newNode的no来修改节点
public void update(HeroNode newNode){
if (head.next == null){
System.out.println("链表为空");
return;
} HeroNode temp = head;
while (temp.next != null){
if (temp.next.no == newNode.no){
newNode.next = temp.next.next;
temp.next = newNode;
break;
} temp = temp.next;
} } //4.删除节点
public void delete(int no){
if (head.next == null){
System.out.println("链表为空 删除失败");
return;
} HeroNode temp = head;
while (temp.next != null){
if (temp.next.no == no){
temp.next = temp.next.next;
System.out.println("删除完成");
return;
} temp = temp.next;
} System.out.println("没有找到对应节点,删除失败"); } // 显示链表
public void showList() {
if (head.next == null) {
System.out.println("链表为空");
return;
} //head不能动 用辅助变量来遍历
HeroNode temp = head.next; while (temp != null) {
//输出节点信息
System.out.println(temp);
//节点后移
temp = temp.next;
}
} } //定义头结点
class HeroNode {
public int no;
public String name;
public String nickname;
public HeroNode next; //指向下一个结点 public HeroNode(int no, String name, String nickname) {
this.no = no;
this.name = name;
this.nickname = nickname;
} @Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}

java实现单链表的增删改以及排序的更多相关文章

  1. 关于单链表的增删改查方法的递归实现(JAVA语言实现)

    因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...

  2. 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

    目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...

  3. Java实现单向链表的增删改查

    class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...

  4. java实战应用:MyBatis实现单表的增删改

    MyBatis 是支持普通 SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 消除了差点儿全部的JDBC代码和參数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于 ...

  5. 2.Mybatis入门程序(单表的增删改成)

    这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...

  6. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  7. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  8. 使用java对sql server进行增删改查

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  9. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

随机推荐

  1. C#数据结构与算法系列(十八):冒泡排序算法(BubbleSort)

    1.介绍 冒泡排序的基本思想就是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡一样逐渐向上冒泡. 因为排序的 ...

  2. Vue前端压缩图片

    一.在组件包下新建compressImage.js // 压缩图片 // eslint-disable-next-line no-unused-vars export function compres ...

  3. 并发02--JAVA内存模型

    在并发编程中,需要解决两个问题:线程间如何通信&线程间如何同步 线程同步:控制不同线程操作顺序的机制 解决这两个问题的方案有两种:共享内存&消息传递 共享内存:通过使用共享内存,隐式通 ...

  4. SpringBoot中VO,DTO,DO,PO的概念、区别和用处

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhuguang10/article/de ...

  5. 哈希传递攻击利用(Pass The Hash)

    最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录. 0x01 哈希传递攻击概念 有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM ...

  6. CSS选择器整理以及优先级介绍

    一.基础选择器 选择器 名称 描述 兼容性 * 通配选择器 选择所有的元素 ie6+ E 元素选择器 选择指定的元素 ie6+ #idName id选择器 选择id属性等于idName的元素 ie6+ ...

  7. vs 打开项目,发现项目中通过nuget引用的dll都不可用的解决方法

    把项目文件夹下的package文件删除,再重新生成项目,就会自动从nuget上下载了.

  8. 如何在Mac中配置Python虚拟环境,踩了好多坑

    如何在Mac中配置Python虚拟环境 1.安装virtualenv pip3 install virtualenv 2.安装virtualenvwrapper pip3 install virtua ...

  9. H3c实验室-(OSPF,Nat,STP,Dhcp,Acl)v.1)

    实验声明 本实验纯属学习记录性质,如有错误,请大哥帮忙提出,马上改正谢谢~还有学习H3c心态要好,他有超级多的bug!!!! 实验介绍 实验条件 实验开始 把图设计好 先说明一下RTA-RTB的线路是 ...

  10. Redis的持久化——RDB和AOF

    推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档