服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - Java双向链表按照顺序添加节点的方法实例

Java双向链表按照顺序添加节点的方法实例

2021-08-03 11:18星星照亮你的秃顶 Java教程

这篇文章主要给大家介绍了关于Java双向链表按照顺序添加节点的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

分析过程:

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

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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 + ", name=" + name +"]";
    }
}

运行结果运行结果

Java双向链表按照顺序添加节点的方法实例

总结

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

原文链接:https://blog.csdn.net/Peppaaa/article/details/113546576

延伸 · 阅读

精彩推荐