package shuJuJieGouYuSuanFa.lianBiao;
/**
* @ClassName DoubleLinkedList
* @Author 瞿肖
* @Date 2022/7/23 19:32
*/
public class DoubleLinkedList {
public static void main(String[] args) {
LinkedList ls = new LinkedList();
DoubleHeroNode d1 = new DoubleHeroNode(1, "零从", "豹子头");
DoubleHeroNode d2 = new DoubleHeroNode(2, "松江", "及时雨");
DoubleHeroNode d3 = new DoubleHeroNode(3, "武松", "打虎英雄");
DoubleHeroNode d4 = new DoubleHeroNode(3, "那你爹", "不知名的小卒");
ls.add(d1);
ls.add(d2);
ls.add(d3);
ls.list(ls.getHead());
ls.update(d4);
System.out.println("************");
ls.list(ls.getHead());
}
}
class LinkedList {
private DoubleHeroNode head = new DoubleHeroNode(0, "", "");
public DoubleHeroNode getHead() {
return head;
}
//遍历双向链表
public void list(DoubleHeroNode head) {
DoubleHeroNode t = head.next;
if (t == null) {
System.out.println("双向链表为空!");
return;
}
while (true) {
if (t == null) {
return;
}
System.out.println(t);
t = t.next;
}
}
/**
* 被删除元素前一位元素的next指向被删的next
* 被删除的后一位元素的pre指向被删除的pre
*
* @param no 被删的序号
*/
public void delede(int no) {
DoubleHeroNode t = head;
if (t.next == null) {
System.out.println("链表为空");
return;
}
while (true) {
if (t == null) {
System.out.println("未找到");
return;
}
if (t.no == no) {
t.pre.next = t.next;
//最后一个没有指向后一位的元素
if (t.next != null) {
t.next.pre = t.pre;
}
}
t = t.next;
}
}
/**
* 找到修改节点,更换数据内容
*
* @param newHead 被修改的节点
*/
public void update(DoubleHeroNode newHead) {
DoubleHeroNode t = head.next;
if (head.next == null) {
System.out.println("链表为空");
}
while (true) {
if (t == null) {
System.out.println("未找到");
return;
}
if (t.no == newHead.no) {
t.name = newHead.name;
t.nikname = newHead.nikname;
return;
}
t = t.next;
}
}
/**
* 如果本节点的下一个节点时空,就说明本节点时最后一个节点
*
* @param newHead 增加的节点
*/
public void add(DoubleHeroNode newHead) {
DoubleHeroNode t = head;
while (true) {
if (t.next == null) {
break;
}
t = t.next;
}
//接到尾部
t.next = newHead;
//前指向本节点
newHead.pre = t;
}
}
class DoubleHeroNode {
public int no;
public String name;
public String nikname;
public DoubleHeroNode next;
public DoubleHeroNode pre;
@Override
public String toString() {
return "DoubleHeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nikname='" + nikname + '\'' +
'}';
}
public DoubleHeroNode(int no, String name, String nikname) {
this.no = no;
this.name = name;
this.nikname = nikname;
}
}
手写双向链表,增删改查
最新推荐文章于 2024-06-05 21:00:00 发布