package com.kali.structure.dual;
/**
* 双向链表的添加、删除、修改及有序添加
* 链尾添加:add(Node node)
* 有序添加:orderAdd(Node node)
*/
public class TestDualLink {
public static void main(String[] args) {
DualLink link = new DualLink();
link.orderAdd(new Node(11,"松江","及时雨"));
link.orderAdd(new Node(2,"林冲","豹子头"));
link.orderAdd(new Node(4,"卢俊义","玉麒麟"));
link.orderAdd(new Node(3,"吴用","智多星"));
System.out.println("原始链表");
link.showLink();
link.update(new Node(3,"用","多星"));
link.update(new Node(4,"义","玉麟"));
System.out.println("更新链表");
link.showLink();
System.out.println("删除后");
link.delete(3);
link.delete(2);
link.delete(4);
link.delete(4);
link.showLink();
}
}
class DualLink{
public Node head;
public DualLink() {
this.head = new Node();
}
/*添加*/
public void add(Node node){
Node index = head;
while (index.next != null) {
index = index.next;
}
index.next = node;
node.pre = index;
}
/*有序添加*/
public void orderAdd(Node node){
Node index = head;
boolean flag = false;
while (index.next != null) {
if(index.next.id > node.id){
break;
}else if(index.next.id == node.id){
flag = true;
break;
}
index = index.next;
}
if(flag){
System.out.println("重复节点id为" + node.id);
}else{
node.next = index.next;
if(index.next != null){
index.next.pre = node;
}
index.next = node;
node.pre = index;
}
}
/*遍历*/
public void showLink(){
Node index = head.next;
if(head.next == null){
System.out.println("链表为空");
return;
}
while (index != null) {
System.out.println(index);
index = index.next;
}
}
/*修改*/
public void update(Node node){
if(head.next == null){
System.out.println("链表为空");
return;
}
Node index = head;
while (index.next != null) {
if (index.next.id == node.id) {
index.next.name = node.name;
index.next.alias = node.alias;
}
index = index.next;
}
}
/*删除*/
public void delete(int id){
if(head.next == null){
System.out.println("链表为空");
return;
}
Node index = head;
boolean flag = false;
while (index.next != null) {
if (index.next.id == id) {
flag = true;
break;
}
index = index.next;
}
if(flag){
index.next = index.next.next;
if(index.next != null){
index.next.pre = index;
}
}else{
System.out.println("没有此元素可删除id为" + id);
}
}
}
class Node{
public int id;
public String name;
public String alias;
public Node pre;
public Node next;
public Node(int id, String name, String alias) {
this.id = id;
this.name = name;
this.alias = alias;
}
public Node() {
}
@Override
public String toString() {
return "Node{" +
"id=" + id +
", name='" + name + '\'' +
", alias='" + alias + '\'' +
'}';
}
}
测试结果(部分):