单链表的实现--反转 逆向打印等


public class SingleLinkList {
    private HeroNode head=new HeroNode(-1,"");

    public void addNode(HeroNode heroNode){
        HeroNode temp=head;
        while (true){
            if(temp.getNext()==null){
                break;
            }
            temp=temp.getNext();
        }
        temp.setNext(heroNode);
    }

    public void delNode(HeroNode heroNode){
        HeroNode temp=head;
        while (true){
            if(temp.getNext()==null){
                break;
            }
            if(temp.getNext()==heroNode){
                HeroNode next = temp.getNext();
                temp.setNext(next.getNext());
                next.setNext(null);
                break;
            }
            temp=temp.getNext();
        }
    }
    public void modifyNode(HeroNode oldNode,HeroNode newNode){
        HeroNode temp=head;
        while (true){
            if(temp.getNext()==null){
                break;
            }
            if(temp.getNext()==oldNode){
                newNode.setNext(oldNode.getNext());
                oldNode.setNext(null);
                temp.setNext(newNode);
                break;
            }
            temp=temp.getNext();
        }
    }
    public void printList(){
        HeroNode temp=head.getNext();
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.getNext();
        }
    }

    public int getNodeNum(){
        int size=0;
        HeroNode temp=head;
        while (temp.getNext()!=null){
            size++;
            temp=temp.getNext();
        }
        return size;
    }


    public HeroNode getLast(int num){
        int size = this.getNodeNum();
        if(size==0){
            return null;
        }
        if(num<0){
            return null;
        }
        int index=size-num+1;
        if(index<0){
            return null;
        }
        int k=1;
        HeroNode temp=head.getNext();
        while (true){
            if(temp==null){
                break;
            }
            if(index==k){
                return temp;
            }
            k++;
            temp=temp.getNext();
        }
        return null;

    }
    //链表的反转
    public void reverse(){
        HeroNode cur=null;
        HeroNode temp=head.getNext();

        HeroNode reverseHead=new HeroNode(-2,"");
        while (true){
            if(temp==null){
                break;
            }
            cur=temp.getNext();
            temp.setNext(null);
            if(reverseHead.getNext()==null) {
                reverseHead.setNext(temp);
            }else {
                HeroNode next = reverseHead.getNext();
                temp.setNext(next);
                reverseHead.setNext(temp);

            }

            temp= cur;
        }
        head.setNext(reverseHead.getNext());

    }

    public void reversePrint(){ //逆向打印
        HeroNode temp=head.getNext();
        Stack<HeroNode> stack = new Stack<>();
        while (true){
            if(temp==null){
                break;
            }
            stack.push(temp);
            temp=temp.getNext();

        }
        while (true){
            if(stack.empty()){
                break;
            }
            System.out.println(stack.pop());
        }
    }



    //--------------------- 更新编号来更新---------------------

   public void addNodeByNo(HeroNode heroNode){
        HeroNode temp=head;
        boolean update=false;
        while (true) {
            if(temp.getNext()==null){
                break;
            }
            if(temp.getNext().getNo()>heroNode.getNo()){
                break;
            }
            if(temp.getNext().getNo()==heroNode.getNo()){
                //更新
                update=true;
                break;
            }
            temp=temp.getNext();

        }
        if(update){
            HeroNode next = temp.getNext();
            temp.setNext(heroNode);
            heroNode.setNext(next.getNext());
            next.setNext(null);
            return;
        }
        if(temp.getNext()==null){
            temp.setNext(heroNode);
            return;
        }
        HeroNode next = temp.getNext();
        temp.setNext(heroNode);
        heroNode.setNext(next);


   }

   public void delNodeByNo(int no){
        HeroNode temp=head;
        boolean del=false;
        while (true){
            if(temp.getNext()==null){
                break;
            }
            if(temp.getNext().getNo()==no){
                del=true;
                break;
            }
            temp=temp.getNext();
        }

        if(del){
            HeroNode next = temp.getNext();
            temp.setNext(next.getNext());
            next.setNext(null);
        }

   }
   public void updateByNo(HeroNode newHero){
        HeroNode temp=head;
        boolean update=false;
        while (true){
            if(temp.getNext()==null){
                break;
            }
            if(temp.getNext().getNo()==newHero.getNo()){
                update=true;
                break;
            }
            temp=temp.getNext();
        }
        if(update){
            HeroNode next = temp.getNext();
            temp.setNext(newHero);
            newHero.setNext(next.getNext());
            next.setNext(null);
        }

   }


    public static void main(String[] args) {
        HeroNode hao = new HeroNode(4, "hao");
        HeroNode ming = new HeroNode(2, "ming");
        HeroNode xiao = new HeroNode(1, "xiao");
      /*  HeroNode xiao = new HeroNode(1, "xiao");
        HeroNode hao = new HeroNode(4, "hao");
        HeroNode ming = new HeroNode(2, "ming");
        SingleLinkList linkList = new SingleLinkList();
        linkList.addNode(xiao);
        linkList.addNode(hao);
        linkList.addNode(ming);
       // linkList.addNode();
        //linkList.addNode(new HeroNode("3","ni"));
        //linkList.addNode(hao);
        linkList.printList();
        System.out.println("............................");
      *//*  linkList.delNode(hao);
        linkList.delNode(xiao);
        linkList.printList();*//*
        linkList.modifyNode(ming,new HeroNode(99,"ddd"));*/
        SingleLinkList linkList = new SingleLinkList();
        linkList.addNode(hao);
        linkList.addNode(ming);
        linkList.addNode(xiao);
        linkList.printList();
        System.out.println("反转后。。。。。。。。。。");
        //linkList.reverse();
        linkList.reversePrint();
    }
}

 

public class HeroNode {
    private int no;
    private String name;
    private HeroNode next;

    public HeroNode(int no, String name) {
        this.no = no;
        this.name = name;
    }

    public HeroNode getNext() {
        return next;
    }

    public void setNext(HeroNode next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no='" + no + '\'' +
                ", name='" + name + '\'' +
                '}';
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

posted @ 2020-08-31 20:08  yangxiaohui227  阅读(229)  评论(0)    收藏  举报