链表

链表    Node:节点  数据&next(指向当前节点的下一节点)  数据&next&prev(双向链表)
        First:
        Last:
        Size;节点数
    单向链表和双向链表

    例.编写双向链表
    
    public class MyLinked{
        
        private Node first;//第一个节点
        private Node last;//第二个节点
        private int size;//节点数

        private void addLast(Object ele){
            Node node  =new Node(ele);

        if(size==0){//第一次添加
          this.first = node;
          this.last = node;
        }
        else{
           //将新增节点作为之前最后一个节点的下一个节点
           this.last.next = node;
           //将新增节点的上一个节点指向之前最后一个节点
           node.prev = this.last;
           //将最后一个节点指向新增节点
           this.last = node;
        }

        size++;
        }

        private void addFirst(Object ele){
        
        Node node  =new Node(ele);

        if(size==0){//第一次添加
          this.first = node;
          this.last = node;
        }
        else{
           //新增节点的下一个节点记录成之前的第一个节点
            node.next = this.first;
           //把之前第一个节点的上一个记录成新增节点
            this.first.prev = node;
           //将链表中第一个节点记录成新增节点
           this.first = node;
        }
        size++;
        }
        
    
        private void remove(Object ele){
        //判断要删除的数据是否在节点中存在
        Node node = this.first;
        for(int i = 0;i<size;i++){
           
           if(!node.ele.equals(ele)){
            
            if(node.next==null){
                System.out.println("不存在");
                return;
            }
            node = node.next;
           }
        }

        if(node == this.first){
        
            this.first = node.next;
            this.first.perv = null;
        }else if(node = this.last){
        
            this.last = node.perv;
            this.last.next = null;
        }else{
        
            node.perv.next = node.next;
            node.last.perv = node.perv;
        }

        size--;
        }

        private boolean search(Object ele){
        
        Node node = this.first;
        for(int i = 0;i<size;i++){
           
           if(!node.ele.equals(ele)){
            
            if(node.next==null){
                System.out.println("不存在");
                return flase;;
            }
            node = node.next;
           }
        }

        return true;
        }

        privatr String toString(){
        
        if(size == 0){
            return "[]";
        }

        StringBuffer stringBuffer = new StringBuffer();
        Node node = this.first;
        
        stringBuffer.append("[");
        for(int i = 0;i<size;i++){
        
            stringBUfffer.append(node.ele);

            if(i!=size-1){
            
            stringBuffer.append(",");
            }
            
            node = node.next
        }
        stringBuffer.append("]");

        return stringBuffer.toString();
        }

        class Node{
        
        Node next;//记录下一个节点
        Node perv;//记录上一个节点

        Object ele;//数据

        public Node(Object ele){
            this.ele = ele;
        }

        }
    
    }




    public class MyLinkedDemo{
    
        Mylinked myLinked = new MyLinked();

        myLinked.addFirst(100);
        myLinked.addFirst(10);

        myLinked.addLast(1000);

        myLinked.remove(100);

        System.out.println(myLinked.toString());

        System.out.println(myLinked.search(10));
    }

posted @ 2018-03-20 22:33  WiQin  阅读(67)  评论(0编辑  收藏  举报