java实现单链表的增删改以及排序
使用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实现单链表的增删改以及排序的更多相关文章
- 关于单链表的增删改查方法的递归实现(JAVA语言实现)
因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...
- 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)
目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...
- Java实现单向链表的增删改查
class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...
- java实战应用:MyBatis实现单表的增删改
MyBatis 是支持普通 SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 消除了差点儿全部的JDBC代码和參数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于 ...
- 2.Mybatis入门程序(单表的增删改成)
这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- 使用java对sql server进行增删改查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
随机推荐
- 3、尚硅谷_SSM高级整合_使用ajax操作实现增加员工的功能
20.尚硅谷_SSM高级整合_新增_创建员工新增的模态框.avi 1.接下来当我们点击增加按钮的时候会弹出一个员工信息的对话框 知识点1:当点击新增的时候会弹出一个bootstrap的一个模态对话框 ...
- web如何测试
当我们负责web测试的时候,先了解B/S架构,然后分析如何开始执行测试,一般步骤:从功能测试,兼容测试,安全测试. 功能测试: 一.链接测试,链接是web应用系统的一个很重要的特征,主要是用于页面之间 ...
- 暑假集训day1 水题 乘法最大
题目大意:有一个长度为N的字符串,要求用K个乘号将其分成K+1个部分,求各个部分相乘的最大值 输入:第一行输入N和K,第二行输入一个长度为N的字符串 算法分析 1. 这个题只是一个简单的dp(甚至连区 ...
- vue全家桶(2.4)
3.6.重定向和别名 3.6.1.重定向 路由重定向通俗的说就是从一个路由重新定位跳转到另一个路由,例如:访问的 "/a" 重定向到"/b" 重定向也是通过配置 ...
- P5774 [JSOI2016]病毒感染
题目描述 JOSI 的边陲小镇爆发了严重的 Jebola 病毒疫情,大批群众感染生命垂危.计算机科学家 JYY 采用最新的算法紧急研制出了 Jebola 疫苗,并火速前往灾区救治患者. 一共有 NN ...
- BZOJ 4055 Misc
原题传送门 比较复杂的一道DP. 设两点(i,j)之间最短路为dis[i][j],则 可转化为: 将该式前后分立,可得: 其中,可以单独求出,后面的部分则需要DP. 设为b(x),枚举i,并计算出从i ...
- 从CAS讲起,真正高性能解决并发编程的原子操作
今天是猿灯塔“365天原创计划”第1天. 一.原子性操作 原子性操作:原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉.及时在多个线程一起执行的时候,一个操作一旦 ...
- 5年前端经验小伙伴教你纯css3实现饼状图
有一些网页中,有时候会碰到饼状图的需求,比如统计图表,进度指示器,定时器等,实现方式也是各种各样,现在也有不少现成的js库,可以直接拿来使用,方便很多.这里笔者为大家演示一种纯css实现饼状图效果的方 ...
- python入门008
目录 一.for循环 作用:for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁 1.for循环语法: 2.应用案例: 注意:break 与 continue也可以用于fo ...
- [JAVA]多线程之实现Callable接口
通过继承Callable方式实现的多线程可以获取线程执行后的返回值 示例代码如下: public class Counter implements Callable<Integer> { ...