结果

image.png
feature
- 有直接添加到链表尾部的方法
- 有number大小添加元素的方法
完整测试代码
package com.nan;
/**
* @author klr
* @create 2020-07-02-22:29
*/
public class DoubleLinkedListDemo {
public static void main(String[] args) {
HeroNode2 hero4 = new HeroNode2(4, "林冲4", "豹子头");
HeroNode2 hero10 = new HeroNode2(8, "林冲8", "豹子头");
HeroNode2 hero1 = new HeroNode2(1, "宋江1", "及时雨");
HeroNode2 hero2 = new HeroNode2(2, "卢俊义2", "玉麒麟");
HeroNode2 hero3 = new HeroNode2(3, "吴用3", "智多星");
DoubleLinkedList dl = new DoubleLinkedList();
// dl.add(hero1);
// dl.add(hero2);
// dl.add(hero3);
// dl.add(hero4);
// dl.add(hero10);
dl.addByOrder(hero4);
dl.addByOrder(hero1);
dl.addByOrder(hero3);
dl.addByOrder(hero2);
dl.addByOrder(hero10);
System.out.println("展示双向链表所有结点");
dl.list();
System.out.println("删除结点");
dl.delete(2);
dl.list();
System.out.println("修改结点");
dl.update(new HeroNode2(1,"修改后的结点","及时雨"));
dl.list();
}
}
class DoubleLinkedList{
private HeroNode2 head = new HeroNode2(0,"","");
public HeroNode2 getHead() {
return head;
}
//只在最后插入结点
public void add(HeroNode2 heroNode2){
if (head.next == null) {
head.next=heroNode2;
return;
}
HeroNode2 temp = head.next;
while (true) {
if(temp.next == null){
break;//找到最后
}
temp=temp.next;
}
temp.next= heroNode2;
heroNode2.pre=temp;
}
//按顺序添加
public void addByOrder(HeroNode2 heroNode2) {
if (head.next == null) {
head.next=heroNode2;
heroNode2.pre=head;
return;
}
HeroNode2 pre=head;
HeroNode2 temp= head.next;
while (temp!=null) {
if(heroNode2.number<temp.number){
break;
}
pre=pre.next;
temp=temp.next;
}
if(temp==null){
pre.next=heroNode2;
heroNode2.pre=pre;
return;
}
heroNode2.next=temp;
temp.pre=heroNode2;
pre.next=heroNode2;
heroNode2.pre=pre;
}
//删除结点
public void delete(int number) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (temp!=null) {
if(temp.number==number){
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("未找到该节点,无法删除");
}
}
//根据id修改结点
public void update(HeroNode2 newHeroNode) {
if (head.next == null) {
System.out.println("链表为空,无法修改");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (true) {
if (temp == null) {
break;//已经遍历完链表
}
if (temp.number == newHeroNode.number) {
flag=true;
break;
}
temp=temp.next;
}
if (flag) {
temp.name = newHeroNode.name;
temp.nickName = newHeroNode.nickName;
}
else {
System.out.printf("未找到编号为%d的英雄\n",newHeroNode.number);
}
}
//遍历
public void list(){
//判断链表是否为空
if (head.next == null) {
System.out.println("链表为空");
return;
}
//因为head不能动
HeroNode2 temp = head.next;
while (true) {
//判断是否到链表最后
if (temp == null) {
break;
}
//输出结点信息
System.out.println(temp);
//将temp后移
temp = temp.next;
}
}
}
class HeroNode2 {
public int number;
public String name;
public String nickName;
public HeroNode2 pre;
public HeroNode2 next;
public HeroNode2(int number, String name, String nickName) {
this.number = number;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeadNode{" +
"number=" + number +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
网友评论