双向链表实现水浒排行增删改查
双向链表与单向链表的不同在于,容易出现空指针异常
在添加时:
heroNode.pre = temp;if(temp.next!=null){temp.next.pre = heroNode;heroNode.next = temp.next;}temp.next = heroNode;
如果刚好是最后一个里面添加,需要 temp.next!=null的限制
在删除时,
有两种情况:
//删除的不是最后一个节点则
if(temp.next!=null){temp.pre.next = temp.next;temp.next.pre = temp.pre;}else{//若是最后一个节点,则:temp.pre.next = null;}
英雄类
class HeroNode {public int no;public String name;public String nickname;public HeroNode next; //下一节点public HeroNode pre; //上一节点public HeroNode(int no,String name,String nickname) {this.no = no;this.name = name;this.nickname = nickname;}//重写toStringpublic String toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";}
定义头
class DoubleLinkedList {//头节点private HeroNode head = new HeroNode(0,"","");//获得头节点public HeroNode getHead(){return head;}
增加
public void add(HeroNode heroNode){HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null){break;}if(temp.next.no>heroNode.no){break;}if(temp.next.no == heroNode.no){flag = true;break;}temp = temp.next;}//添加if(flag){System.out.println("已存在");}else{heroNode.pre = temp;if(temp.next!=null){temp.next.pre = heroNode;heroNode.next = temp.next;}temp.next = heroNode;}}
修改
//修改public void update(HeroNode heroNode){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp == null){break;}if(heroNode.no == temp.no){temp.name = heroNode.name;temp.nickname = heroNode.nickname;flag = true;break;}temp = temp.next;}if(flag){System.out.println("修改成功");}else{System.out.println("修改失败");}}
删除
public void delete(int no){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp == null){break;}if(temp.no == no){flag = true;break;}temp = temp.next;}if(flag){ if(temp.next!=null){temp.pre.next = temp.next;temp.next.pre = temp.pre;}else{temp.pre.next = null;}System.out.println("删除成功");}else{System.out.println("删除失败");}}
显示
public void list(){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;while(true){if(temp == null){break;}System.out.println(temp);temp = temp.next;}}
完整代码
package linkedList;public class DoubleLinklist {public static void main(String[] args) {HeroNode hero1 = new HeroNode(1,"松江","及时雨");HeroNode hero2 = new HeroNode(2,"吴用","智多星");HeroNode hero3 = new HeroNode(3,"卢俊义","玉麒麟");HeroNode hero4 = new HeroNode(4,"林冲","豹子头");DoubleLinkedList list= new DoubleLinkedList();/**list.add(hero1);*list.add(hero2);*list.add(hero3);*list.add(hero4);*/list.add(hero1);list.add(hero4);list.add(hero2);list.add(hero3);list.add(hero3);list.list();System.out.println("");HeroNode hero5 = new HeroNode(2,"林冲","豹子头==");list.update(hero5);list.list();list.delete(3);list.list();}}
class DoubleLinkedList {//头节点private HeroNode head = new HeroNode(0,"","");//获得头节点public HeroNode getHead(){return head;}public void list(){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;while(true){if(temp == null){break;}System.out.println(temp);temp = temp.next;}}public void add(HeroNode heroNode){HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null){break;}if(temp.next.no>heroNode.no){break;}if(temp.next.no == heroNode.no){flag = true;break;}temp = temp.next;}//添加if(flag){System.out.println("已存在");}else{heroNode.pre = temp;if(temp.next!=null){temp.next.pre = heroNode;heroNode.next = temp.next;}temp.next = heroNode;}}//修改public void update(HeroNode heroNode){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp == null){break;}if(heroNode.no == temp.no){temp.name = heroNode.name;temp.nickname = heroNode.nickname;flag = true;break;}temp = temp.next;}if(flag){System.out.println("修改成功");}else{System.out.println("修改失败");}}public void delete(int no){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp == null){break;}if(temp.no == no){flag = true;break;}temp = temp.next;}if(flag){ if(temp.next!=null){temp.pre.next = temp.next;temp.next.pre = temp.pre;}else{temp.pre.next = null;}System.out.println("删除成功");}else{System.out.println("删除失败");}}}class HeroNode {public int no;public String name;public String nickname;public HeroNode next; //下一节点public HeroNode pre; //上一节点public HeroNode(int no,String name,String nickname) {this.no = no;this.name = name;this.nickname = nickname;}//重写toStringpublic String toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";}
}
双向链表实现水浒排行增删改查相关推荐
- 单链表实例(1)实现水浒传排行增删改查和练习
实现水浒传排行增删改查 对于英雄类,每一个类里都有指向下一个节点的引用 public HeroNode next; 对于添加 根据编号大小,插入 对于删除 把 要删除的节点的next赋值到被删除的上一 ...
- 逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查
文章目录 节点类 链表类 测试类 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后 ...
- Java程序-单链表增删改查(实现对水浒人物的增删改查操作)
单链表增删改查(实现对水浒人物的增删改查操作) 前言 一.链表(Linked List)介绍 二.应用实例 1.问题描述 2.代码实现 总结 前言 参考:B站,尚硅谷数据结构与算法 课程 一.链表(L ...
- 双向链表增删改查分析
双向链表增删改查分析 单向链表的缺点 单向链表查找方向只能是一个方向,而双向链表可以向前或者向后查找. 单向链表不能自我删除,需要靠辅助节点,而双向链表,则可以自我删除,所以前面我们单链表删除时节点, ...
- c语言 双向链表增删修查,手写双链表,并实现增删改查
手写双链表,并实现增删改查 public class DoublyLinkedListT { // 一个空的头节点 private final Node head = new Node(null); ...
- 单链表LinkedList的增删改查
数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了 ...
- 三、单链表增删改查原理和代码实现
单链表 1.简单介绍 (1)单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素 ...
- 数据结构单链表SingleLinkedList,Java实现单链表增删改查
文章目录 链表介绍 应用示例 链表介绍 链表是有序的列表,但是它在内存中是存储是不连续的,如下: 链表是以节点的方式来存储,是链式存储: ①每个节点包含data域存储数据,next域指向下一个节点 ② ...
- ListView的增删改查(实战)
这是对ListView的增删改查相关操作的具体运用. package com.jxust.day05_09_listviewdemo;import android.app.Activity; impo ...
最新文章
- NOIP2005普及组第4题 循环
- Java 利用接口实现回调
- 通过Visual Studio 2005的项目模板来加速开发过程
- 【嵌入式】Libmodbus源码分析(二)-常用接口函数分析
- 保驾护航金三银四,含BATJM大厂
- 一加8渲染图曝光:后置三摄/五种配色可选
- 企业创新流程的“正向推”与“反向推”思考
- java中sql查找_Java 中如何使用 SQL 查询文本
- 【GlobalMapper精品教程】008:如何根据指定区域(shp、kml、cad)下载卫星影像?
- android开发收银系统源码,基于android的语音智能收银系统设计与实现-软件工程专业论文.docx...
- VMware下安装win7教程
- 上号神器扫码登录网站使用教程
- 在线作图|2分钟绘制一张相关性桑基图
- c# 十六进制数据转十六进制字符串
- Connect Four四子棋c++程序 - 善后处理(3)
- framemaker 换行
- 激励人生成功的10句经典英文
- API请求示例汇总,亲测有效,taobaotmall,1688,pinduoduo等平台数据,信息化产业
- .NET USEING 原理
- 如何编写智能合约(Smart Contract)?(II)建立加密代币
热门文章
- html键盘弹起代码
- cheerio中文API-02
- 百度AI攻略:车辆属性识别
- 简易的万年历查询系统(C++版本)
- 龙芯3B1500平台,源码安装nodejs过程中失败问题
- php sqlite linux,linux+apache+sqlite+php - 唐老鸭的日志 - 网易博客
- 【Python】将txt文件转换为html
- 台风把汽车的java,台风“利奇马”过后,大批泡水车怎么处理?“去处”让人难以接受...
- python抓取贴吧_零基础写python爬虫之抓取百度贴吧代码分享
- spring-bean对象创建销毁顺序depend-on 干预