package com.yg.linkedList;/*
@author GeQiLin
@date 2020/2/21 13:46
*/
public class DoubleLinkedListDemo {
public static void main(String[] args) {
//测试
System.out.println("双向链表的测试");
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
// doubleLinkedList.addNode(new HereNode2(1, "宋江", "及时雨"));
// doubleLinkedList.addNode(new HereNode2(3, "吴用", "智多星"));
// doubleLinkedList.addNode(new HereNode2(2, "卢俊义", "玉麒麟"));
// doubleLinkedList.addNode(new HereNode2(4, "林聪", "豹子头"));
HereNode2 head = doubleLinkedList.getHead();
// DoubleLinkedList.showHereNode2(head);
//删除双向链表
// doubleLinkedList.delNodeByNo(2);
// System.out.println("删除后***");
// DoubleLinkedList.showHereNode2(head);
//修改节点信息
// doubleLinkedList.updataNode(new HereNode2(2, "haha", "heheh"));
// System.out.println("修改后***");
// DoubleLinkedList.showHereNode2(head);
//测试按照编号添加节点
doubleLinkedList.addNodeByNo(new HereNode2(1, "宋江", "及时雨"));
doubleLinkedList.addNodeByNo(new HereNode2(3, "吴用", "智多星"));
doubleLinkedList.addNodeByNo(new HereNode2(2, "卢俊义", "玉麒麟"));
doubleLinkedList.addNodeByNo(new HereNode2(4, "林聪", "豹子头"));
DoubleLinkedList.showHereNode2(head);
}
}
class DoubleLinkedList {
private HereNode2 head = new HereNode2(0, "", "");
public HereNode2 getHead() {
return head;
}
//显示节点(遍历)
public static void showHereNode2(HereNode2 head) {
if (head.next == null) {
System.out.println("链表为空!!");
return;
}
HereNode2 temp = head;
while (true) {
if (temp.next == null) {
return;
}
System.out.println(temp.next);
temp = temp.next;
}
}
//添加节点
public void addNode(HereNode2 node) {
if (node == null) {
return;
}
HereNode2 temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
//形成一个双向链表
temp.next = node;
node.pre = temp;
}
//修改链表节点信息
public void updataNode(HereNode2 newNode) {
boolean flag = false;
if (head.next == null) {
System.out.println("列表为空!!");
return;
}
HereNode2 temp = head.next;
while (true) {
if (temp == null) {
break;
} else if (temp.no == newNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = newNode.name;
temp.nickName = newNode.nickName;
} else {
System.out.println("该节点不存在!!");
}
}
//删除节点
public void delNodeByNo(int no) {
boolean falg = false;
if (head.next == null) {
System.out.println("节点为空!!");
return;
}
HereNode2 temp = head;
while (true) {
if (temp == null) {
System.out.println("节点为空!!");
break;
}
if (temp.no == no) {
falg = true;
break;
}
temp = temp.next;
}
if (falg) {
temp.pre.next = temp.next;
//如果temp是最后一个节点会出现空指针异常
if (temp.next != null) {
temp.next.pre = temp.pre;
}
} else {
System.out.println("要删除的节点不存在!!");
}
}
//按照编号顺序添加节点
public void addNodeByNo(HereNode2 node) {
if (node == null) {
return;
}
boolean flag = false;
HereNode2 temp = head;
while (temp.next != null) {
if (temp.next.no == node.no) {
flag = true;
break;
} else if (temp.next.no > node.no) {
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("编号为" + temp.next.no + "的节点已经存在添加失败");
return;
}
if(temp.next!=null){
temp.next.pre=node;
node.next=temp.next;
}
temp.next=node;
node.pre=temp;
}
}
class HereNode2 {
public int no;
public String name;
public String nickName;
public HereNode2 next;
public HereNode2 pre;
public HereNode2(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
this.next = next;
}
@Override
public String toString() {
return "HereNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
双端链表的增加,删除,修改,遍历操作的实现
猜你喜欢
转载自blog.csdn.net/lin1214000999/article/details/104431315
今日推荐
周排行