package com.example.dataStructureAndAlgorithm.LinkedList;
public class DoubleLinkedListDemo {
public static void main(String[] args) {
NodeA node1 = new NodeA(1, "1");
NodeA node2 = new NodeA(2, "2");
NodeA node3 = new NodeA(3, "3");
NodeA node4 = new NodeA(4, "4");
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
doubleLinkedList.addByNo(node1);
doubleLinkedList.addByNo(node3);
doubleLinkedList.addByNo(node2);
doubleLinkedList.addByNo(node4);
doubleLinkedList.show();
// System.out.println("更新后");
// doubleLinkedList.update(new NodeA(2, "2222---"));
// doubleLinkedList.show();
// System.out.println("删除后");
// doubleLinkedList.delete(1);
// doubleLinkedList.delete(4);
// doubleLinkedList.show();
}
}
class DoubleLinkedList {
private NodeA head = new NodeA(0, "");
public NodeA getHead() {
return head;
}
public void add(NodeA nodeA) {
NodeA temp = head;
while (true) {
if (temp.next == null) {
temp.next = nodeA;
nodeA.per = temp;
return;
}
temp = temp.next;
}
}
public void addByNo(NodeA nodeA){
boolean flag=false;
NodeA temp=head;
while (true){
if (temp.next==null){
break;
}else if (temp.next.no>nodeA.no){
break;
}else if (temp.next.no==nodeA.no){
flag=true;
break;
}
temp=temp.next;
}
if (flag){
System.out.println("此编号节点已存在");
}else {
//把新的节点添加到temp原来的下一个节点的前面即temp的后面。所以新节点的next应指向temp原来的下一个节点。新节点的per应指向temp.
nodeA.next=temp.next;
nodeA.per=temp;
temp.next=nodeA;
}
}
public void update(NodeA nodeA) {
NodeA temp = head;
if (temp.next != null) {
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no == nodeA.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next.name = nodeA.name;
} else {
System.out.println("未找到相关编号节点");
}
} else
System.out.println("链表为空");
}
public void delete(int no) {
NodeA temp = head.next;
if (temp != null) {
boolean flag = false;
while (true) {
if (temp == null) {
break;
}
if (temp.no == no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
//自我删除。删除temp。将temp的前一个节点的next指向temp的next
temp.per.next = temp.next;
if (temp.next != null) {
temp.next.per = temp.per;
}
}
}
}
public void show() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
NodeA temp = head.next;
while (true) {
if (temp.next == null) {
System.out.println(temp);
return;
}
System.out.println(temp);
temp = temp.next;
}
}
}
class NodeA {
public int no;
public String name;
NodeA next;//指向后一个
NodeA per;//指向前一个
public NodeA(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "Node{" +
"no=" + no +
", name=" + name +
'}';
}
}
双向链表应用实例(增删改查)
最新推荐文章于 2024-06-24 00:46:59 发布