分析过程:

首先需要比较待添加的节点编号与已有的节点编号的大小,若待添加的节点编号已经存在,则不能加入。为防止出现空指针的情况,需要对节点的位置进行判断。

示例代码:

package linkedlist;

public class DoubleLinkedListDemo {

public static void main(String[] args) {

// 测试

System.out.println("双向链表的测试");

// 创建节点

Node node1 = new Node(1, "道明寺");

Node node2 = new Node(2, "花泽类");

Node node3 = new Node(3, "西门总二郎");

Node node4 = new Node(4, "美作玲");

// 创建一个双向链表

DoubleLinkedList doubleLinkedList = new DoubleLinkedList();

// 添加节点

doubleLinkedList.addByOrder(node1);

doubleLinkedList.addByOrder(node4);

doubleLinkedList.addByOrder(node3);

doubleLinkedList.addByOrder(node2);

// 显示排序后的双向链表

doubleLinkedList.list();

}

}

// 创建一个双向链表的类

class DoubleLinkedList {

// 先初始化头节点,头节点不动

private Node head = new Node(0, "");

// 返回头节点

public Node getHead() {

return head;

}

// 添加节点时,根据编号将节点插入到指定位置

// 如果有这个编号,则添加失败,并给出提示

public void addByOrder(Node node) {

// 头节点不能动,通过一个辅助指针(变量)帮助找到需要添加的位置

Node temp = head;

boolean flag = false;// flag标志添加的编号是否存在,默认为false

while(true) {

if(temp.next == null) {

break;

}

if(temp.next.no > node.no) {

break;

}

if(temp.next.no == node.no) {

flag = true;

break;

}

temp = temp.next;// 遍历链表

}

if(flag) {

System.out.printf("输入的编号%d已经存在,不能加入\n", node.no);

}

else {

// 为防止出现空指针的情况,需要对temp节点位置进行判断

// 若双向链表尚未到达尾端,则需要将node节点与其相邻的后面的节点进行连接

if(temp.next != null) {

node.next = temp.next;

temp.next.pre = node;

}

// 无论双向链表是否到达尾端,都需要将node节点与其相邻的前面的节点进行连接

temp.next = node;

node.pre = temp;

}

}

// 遍历双向链表的方法

// 显示链表【遍历】

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 = temp.next;

}

}

}

// 创建一个双向链表的类

// 定义Node,每个Node对象就是一个节点

class Node {

public int no;

public String name;

public Node next;// 指向下一个节点,默认为null

public Node pre;// 指向前一个节点,默认为null

// 构造器

public Node(int no, String name) {

this.no = no;

this.name = name;

}

// 为了显示方便,重新toString

@Override

public String toString() {

return "Node [no=" + no + ",]";

}

}

运行结果运行结果

总结

到此这篇关于Java双向链表按照顺序添加节点的文章就介绍到这了,更多相关Java双向链表按照顺序添加节点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

java 双向链表例子_Java双向链表按照顺序添加节点的方法实例_Java_软件编程相关推荐

  1. java nginx 例子_Java及nginx实现文件权限控制代码实例

    我们知道,使用nginx作为文件下载服务器,可以极大地降低对后端Java服务器的负载冲击,但是nginx本身并不提供授权控制,因此好的方案是由后端服务器实现权限控制,最好的方式是直接复用应用的认证体系 ...

  2. java猜拳论文_Java人机猜拳实现的思路及方法实例

    创建四个类: 机器人类 玩家类 游戏类 运行类 一.机器人类: 1.首先创建两个成员变量,分别作为机器人的名字与积分: String name; int jifen; 2.然后创建方法"pc ...

  3. java 全角_java 全角半角字符转换的方法实例

    这篇文章主要介绍了java 全角半角字符转换的方法,大家参考使用吧 如果搞明白了Java中全角字符和半角字符之间的关系 那他们之间的转换根本就不是个事. 可以通过下面的程序看看Java中所有字符以及对 ...

  4. list申请java,java把一个list中的内容添加到另一个list中 FPGA编程问题:有多个.v文件与module,把他们加到......

    导航:网站首页 > java把一个list中的内容添加到另一个list中 FPGA编程问题:有多个.v文件与module,把他们加到... java把一个list中的内容添加到另一个list中 ...

  5. jquery中的创建节点和添加节点的方法

    今天来说一下针对jquary关于创建节点和添加节点的方法,先来看看创建节点: 1.直接添加节点内容即可 $("div").append('<a href="http ...

  6. php xml 添加节点 出问题,PHP往XML中添加节点的方法

    本文实例讲述了PHP往XML中添加节点的方法.分享给大家供大家参考.具体方法如下: 1. contacts.xml代码 复制代码 代码如下: J J J Manager National 1971-1 ...

  7. 双向链表示意图_java双向链表示意图

    双向链表结构和单向链表的区别:最后一个结点的链接地址上,单向链表是null,而双向链表是表头的链接地址. 即双向链表的head和last互相指向 示意图 表头为空 head之前的节点是last=50这 ...

  8. java override例子_java经常碰到的@Override标签

    无论是在netBeans还是在eclipse开发环境中,写java代码的时候经常会碰到@Override标签,平时只知道是覆盖的意思就好了~那么这个标签的价值就只有这些吗? 最近一次,重翻<Th ...

  9. java args例子_Spring AOP中使用args表达式的方法示例

    本文实例讲述了Spring AOP中使用args表达式的方法.分享给大家供大家参考,具体如下: 一 配置 xmlns:xsi="http://www.w3.org/2001/XMLSchem ...

最新文章

  1. mysql 去重_mysql 去重留一
  2. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)(转)
  3. Save More Mice 贪心
  4. CentOS配置Tair
  5. basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载
  6. 人生苦短,我用Python(Python快速教程 - 基础篇)
  7. javascript数组总结
  8. 物联网核心安全系列——智能门锁安全问题
  9. oracle sequence 应用,oracle应用之使用sequence批量写数据
  10. from injection shell sql to_FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION
  11. NOIP 2016 普及组 Solution (T1-T3)
  12. 简单理解JavaScript中的闭包
  13. python 颜色大全
  14. 荣耀手机动态修改imei信息
  15. App在appStore上搜索不到的解决方案
  16. 【动态规划】FatMouse's Speed
  17. 【JAVA高级技术】Java 处理结构化数据多种解决方案
  18. Kernel, tainted, 被污染的实例
  19. NOIP / CSP-S/J初赛基础知识1
  20. win7计算机资源管理器卡住,如何解决win7系统资源管理器已停止工作的问题

热门文章

  1. python global将结果存储起来给另外一个文件对象使用
  2. Python小知识: List的赋值方法,不能直接等于
  3. windows10访问ubuntu samba共享文件夹报错:不允许一个用户使用一个以上用户与服务器多重连接(没解决)
  4. 进程、线程、端口、服务间关系
  5. linux 下如何升级CMAKE?(安装指定版本cmake)(高版本cmake)(不删除之前的,可以用软连接)
  6. 【深度学习的数学】超平面是什么?(自由度比空间维度小1)
  7. chrome浏览器如何重新打开关闭的标签页?(快捷键ctrl+shift+t)
  8. python 如何获取数组(列表)长度? len()
  9. 详解java集合之ArrayList——底层实现是一个Object数组。分析ArrayList的自动扩容,原来不一定是1.5倍
  10. linux防火墙操作命令