数据结构链表逆袭如何实现?


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方法,能够使它逆行排序。