文章目录
- 1. 结点类
- 2. 定义DoublelinkedList类 操作链表方法
- 3. 测试双链表
1. 结点类
//定义HeroNode,每个HeroNode对象就是一个结点
class HeroNode2 {
public int no;
public String name;
public String nickname;
public HeroNode2 next; // 指向下一个结点
public HeroNode2 pre; //指向上一个结点
public HeroNode2(int no, String name, String nickname) {
this.no = no;
this.name = name;
this.nickname = nickname;
}
@Override
public String toString() {
return "HeroNode[" +
"no=" + no +
", name='" + name + ''' +
", nickname='" + nickname + "'" + "]";
}
}
2. 定义DoublelinkedList类 操作链表方法
class DoublelinkedList{
//初始化头结点
private HeroNode2 head = new HeroNode2(0, "", "");
public HeroNode2 getHead() {
return head;
}
//添加结点到链表的方法
public void add(HeroNode2 heroNode){
HeroNode2 temp = head;
while(true){
if(temp.next == null){
break;
}
temp = temp.next;
}
//next指向下一个
temp.next = heroNode;
//pre指向前一个
heroNode.pre = temp;
}
//遍历显示链表
public void list(){
//判断链表是否为空
if(head.next == null){
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
while (true){
if (temp == null){
break;
}
System.out.println(temp);
//temp后移
temp = temp.next;
}
}
//修改结点信息的方法
public void updata(HeroNode2 node){
if (head.next == null){
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while(true){
if (temp == null){
break;//已经遍历完链表
}
if (temp.no == node.no){
//找到结点
flag = true;
break;
}
temp = temp.next; //向下一个结点移动
}
if (flag){
//找到结点,进行信息修改
temp.name = node.name;
temp.nickname = node.name;
System.out.println("修改成功");
}else {
//未找到结点
System.out.printf("没有找到编号为 %d的节点,无法修改信息",node.no);
System.out.println();
}
}
//删除指定结点(2)
public void delete(int no){
if (head.next == null){
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (true){
if (temp == null){
//遍历完
System.out.println("无满足条件的节点,无法删除");
return;
}
//找到要删除的结点
if (temp.no == no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.pre.next = temp.next;
//删除最后一个节点时
if (temp.next != null){
temp.next.pre = temp.pre;
}
}else{
System.out.println("无满足条件的节点,无法删除");
}
}
}
3. 测试双链表
public class DoublelinkedListDemo{
public static void main(String[] args) {
//创建结点,填入信息
HeroNode2 heroNode1 = new HeroNode2(1,"地虎铠甲","地虎侠");
HeroNode2 heroNode2 = new HeroNode2(2,"炎龙铠甲","炎龙侠");
HeroNode2 heroNode3 = new HeroNode2(3,"黑犀铠甲","黑犀侠");
//创建链表
DoublelinkedList doublelinkedList = new DoublelinkedList();
//添加节点到链表中
doublelinkedList.add(heroNode1);
doublelinkedList.add(heroNode2);
doublelinkedList.add(heroNode3);
doublelinkedList.list();
//测试删除节点
//测试修改节点信息
}
}