public class Doublelist {
public static void main(String[] args) {
HeroNode2 name1=new HeroNode2(1,"老鸟","大神");
HeroNode2 name2=new HeroNode2(2,"xx","xx");
HeroNode2 name3=new HeroNode2(3,"菜鸟","小神");
HeroNode2 name4=new HeroNode2(4,"vv","xx");
SingleLinkedList2 singleLinkedList=new SingleLinkedList2();
singleLinkedList.add(name1);
singleLinkedList.add(name2);
singleLinkedList.add(name3);
singleLinkedList.add(name4);
singleLinkedList.list();
System.out.println("修改后---------------");
HeroNode2 n=new HeroNode2(2,"油条","中神");
singleLinkedList.update(n);
singleLinkedList.list();
System.out.println("删除后--------------");
singleLinkedList.delete(4);
singleLinkedList.list();
}
}
class SingleLinkedList2 {
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 = temp.next;
}
// 当退出while循环时,temp就指向了链表的最后
// 形成一个双向链表
temp.next = heroNode;
heroNode.pre = temp;
}
//定义修改节点方法
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.SerialNumber==newHeroNode.SerialNumber){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.name=newHeroNode.name;
temp.information=newHeroNode.information;
}else {
System.out.println("没有找到");
}
}
public void delete(int SerialNumber){
if(head.next==null){
System.out.println("链表为空");
return;
}
HeroNode2 temp=head.next;
boolean flag=false;
while (true){
if(temp==null){
break;
}
if(temp.SerialNumber==SerialNumber){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.pre.next=temp.next;
if(temp.next!=null) {
temp.next.pre = temp.pre;
}
}
}
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.next;
}
}
}
class HeroNode2{
public int SerialNumber;
public String name;
public String information;
public HeroNode2 next; //指向下一个节点,默认为null
public HeroNode2 pre;//指向前一个节点,默认为null
public HeroNode2(int SerialNumber,String name,String information){
this.SerialNumber=SerialNumber;
this.name=name;
this.information=information;
}
@Override
public String toString() {
return "HeroNode{" +
"SerialNumber=" + SerialNumber +
", name='" + name + '\'' +
", information='" + information + '\'';
}
}
更改链表中的add方法,能够使它逆行排序。