完整代码实例-Java实现 双链表按顺序添加结点
完整代码如下:
package DataStrcture.ArrayDemo.doublelinkedlistdemo;
public class AddByOrderDList {
//结点类
static class Node{
Node next;
Node pre;
int num;
///构造器和toString方法
public Node(int num){
this.num = num;
}
public String toString(){
return "num= "+num;
}
}
/// 头结点
Node head =new Node(0);
///结点的顺序插入
/*
结点顺序插入的三种情况:
1. temp.next.num == node.num 如果不允许重复结点,则不插入链表中
2. temp.next.num > node.num 找到了! 插入到temp的后面即可(注意有无next的区别噢)
3. temp.next.num < node.num 还没找到, 继续找吧
*/
public void addByOrder(Node node){
//临时变量
Node temp = head;
boolean flag =false; //是否插入结点的标志
while(true){
if(temp.next == null){
flag =true;
break;
}
if(temp.next.num == node.num)
break;
if(temp.next.num > node.num){
flag = true;
break;
}
temp =temp.next;
}
if(flag){
node.next = temp.next;
node.pre = temp;
temp.next = node;
if(node.next != null)
如果node节点添加到链表的尾部, 那么此句必然node.next必然导致空指针异常.
//所以我们对node.next 加上判断
node.next.pre = node;
}
}
///4.双链表的打印
public void list() {
//临时变量
Node temp = head;
while (true) {
if (temp.next == null)
break;
temp = temp.next;
System.out.println(temp);
}
}
public static void main(String[] args) {
AddByOrderDList dl = new AddByOrderDList();
Node node_1 = new Node(6);
Node node_2 = new Node(1);
Node node_3 = new Node(7);
Node node_4 = new Node(2);
Node node_5 = new Node(9);
Node node_6 = new Node(5);
Node node_7 = new Node(12);
Node node_9 = new Node(79);
Node node_10 = new Node(80);
dl.addByOrder(node_1);
dl.addByOrder(node_2);
dl.addByOrder(node_3);
dl.addByOrder(node_4);
dl.addByOrder(node_5);
dl.addByOrder(node_6);
dl.addByOrder(node_7);
dl.addByOrder(node_9);
dl.addByOrder(node_10);
dl.list();
}
}
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)