博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java双链表实现数据的增删改查(CRUD)!
阅读量:3961 次
发布时间:2019-05-24

本文共 4751 字,大约阅读时间需要 15 分钟。

Java双链表实现数据的增删改查(CRUD)!

简单的说一下单链表与双链表的区别:

单链表:单链表有一个指针和一个数据域,所以单链表只能通过这一个指针进行正向的访问节点的数据,操作简单。

双链表:除了有一个指向下一结点的指针外,还有一个指向前一结点的指针,可以通过前指针快速找到前一结点,但多了一个指针,所以需要的存储空间大于单链表,同时具有从双向链表中的任意一个结点开始,都可以很方便地访问前驱结点和后继结点。

适用场景

单向链表更适合元素的增加与删除,双向链表更适合元素的查询工作。

代码也就不多解释都有注释的

package List;/** * @author ganxiang * IDE      IntelliJ IDEA * @project_name and filename JavaDemo DoubleList * @date 2020/02/25 0025 09:50 */public class DoubleList {
class DefineDoubleNode{
int data; DefineDoubleNode pre; DefineDoubleNode next; public DefineDoubleNode(){
//初始化链表 this.data=0; this.pre =null; this.next=null; } public DefineDoubleNode (int data){
this.data=data; }//初始化链表 public int getData(){
return data; }//获取节点数据 public void setData(int data){
this.data =data; }//设置节点数据 public DefineDoubleNode getPre(){
return pre; }//获取前驱节点地址 public void setPre(DefineDoubleNode pre){
this.pre=pre; }//设置前驱节点地址 public DefineDoubleNode getNext(){
return this.next; }//获取下一个节点地址 public void setNext(DefineDoubleNode next){
this.next =next; }//设置下一个节点的地址 } public void printList(DefineDoubleNode ahead){
//正向遍历链表 while (ahead!=null){
System.out.print(ahead.getData()); System.out.print(" "); ahead=ahead.getNext(); } } public void reversePrintList(DefineDoubleNode head){
//反向遍历链表 DefineDoubleNode ahead =head; while (ahead.getNext()!=null){
ahead =ahead.getNext(); } while (ahead!=null){
System.out.print(ahead.getData()); System.out.print(" "); ahead =ahead.getPre(); } } public int getLength(DefineDoubleNode head){
//计算链表长度 int len=0; while (head!=null){
len++; head =head.getNext(); } return len; } DefineDoubleNode head=null;//这个head节点之后都是对他操作的,很重要 public DefineDoubleNode inset_many(DefineDoubleNode head){
//插入多个数据 DefineDoubleNode ahead=head ; for (int i=10;i<=15;i++){
if (ahead==null){
ahead =new DefineDoubleNode(i);// printList(t); } else{
DefineDoubleNode thead =ahead; while (thead.next!=null){
thead= thead.next; } DefineDoubleNode temp =new DefineDoubleNode(); temp.setData(i); temp.setPre(thead); thead.setNext(temp);// printList(ahead.next); } } return ahead; } public DefineDoubleNode addFirst(int data,DefineDoubleNode head){
//在头结点插入数据 DefineDoubleNode temp=new DefineDoubleNode(data); DefineDoubleNode ahead =head; if(ahead==null)ahead=temp; else{
temp.setPre(null); ahead.setPre(temp); temp.setNext(ahead); ahead =temp; } return ahead; } public DefineDoubleNode addLast(int data,DefineDoubleNode head){
//在尾节点插入数据 DefineDoubleNode ahead =head; DefineDoubleNode temp =new DefineDoubleNode(data); while (ahead.next!=null){
ahead =ahead.next; } temp.setPre(ahead); temp.setNext(null); ahead.setNext(temp); return head; } public DefineDoubleNode insert_index(int k,int data,DefineDoubleNode head){
//在指定的位置k插入数据 DefineDoubleNode ahead =head; if (k<1||k>getLength(ahead))System.out.println("不在操作范围!"); else if (k==1) return addFirst(data,ahead); else if (k==getLength(ahead)) return addLast(data,ahead); else {
DefineDoubleNode newNode = new DefineDoubleNode(data); int count =1; DefineDoubleNode temp=ahead; while(count
getLength(ahead))System.out.println("不在操作范围!"); else if (k==1) return delFirst(ahead); else if (k==getLength(ahead)) return delLast(ahead); else {
int count=1; DefineDoubleNode tmp=ahead; while (tmp.getNext()!=null&&count
getLength(ahead))System.out.println("不在操作范围!"); else if (k==1) return update_First(data,ahead); else if (k==getLength(ahead)) return update_Last(data,ahead); else {
DefineDoubleNode tmp =ahead; DefineDoubleNode newNode =new DefineDoubleNode(); int count =1; while (count

运行展示

更指定的数据 指定k=5 将第五个节点的数据更新为500
在这里插入图片描述
指定插入 指定k=5插入节点数据为300
在这里插入图片描述
指定删除 k=2的节点
在这里插入图片描述

转载地址:http://hhqzi.baihongyu.com/

你可能感兴趣的文章
awk的混合编程
查看>>
awk编程
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
默认shell的修改
查看>>
Linux中的chage命令
查看>>
linux-详细解析密码文件passwd与shadow
查看>>
su- 与su的区别
查看>>
linux下发邮件mail
查看>>
/etc/group与/etc/gshadow文件解析
查看>>
echo如何手动输出换行
查看>>
linux下join连接
查看>>
身份证的正确使用方法——非常重要的知识
查看>>
ExtJS & Ajax
查看>>
Tomcat在Windows下的免安装配置
查看>>
JMeter常用测试元件
查看>>
JMeter——使用技巧
查看>>
Hibernate 实体层设计--Table per subclass
查看>>
Hibernate 实体层设计--Table per subclass
查看>>
Hibernate 概述及入门
查看>>
shell——判断文件是否存在
查看>>