Java实现双链表

package Exception;
//双链表的实现
import javax.xml.soap.Node;
class ken{
    private Node first;//首节点
    private Node last;//尾节点
    private int size;//链表长度
    //在首节点增加
    public void add(Object elem){
        Node node = new Node(elem);
        if(size==0){
            this.first = node;
            this.last = node;
        }else{
            node.next = this.first;
            this.first.prir = node;
            this.first  = node;
            }
        size++;
        
    }
    //在尾节点增加
    public void addlast(Object elem){
        Node node = new Node(elem);
        if(size==0){
            this.first = node;
            this.last = node;
        }else{
            node.prir = this.last;
            node.prir.next = node;
            this.last = node;
        }
        size++;
    }
    //查找
    public boolean search(Object elem){
        Node node = this.first;
        for(int i = 0;i<size;i++){
            if(!node.elem.equals(elem)){
                if(node.next == null){
                    return false;
                }
                node = node.next;
            }
        }
        return true;
    }
    //删除第一节点
    public void removefirst(Object elem){
        Node node = this.first;
        for(int i = 0;i<size;i++){
            if(node.elem.equals(elem)){
                if(node==this.first){
                    this.first = node.next;
                    node.next.prir = null;
                }
            }
            node = node.next;
        }
        size--;
    }
    //综合的删除,可以删除任何一部分
    public void remove(Object elem){
        Node node = this.first;
        for(int i = 0;i<size;i++){
            if(node.elem.equals(elem)){
                if(node==this.first){
                    this.first = node.next;
                    node.next.prir = null;
                    size--;
                }else if(node==this.last){
                    this.last = node.prir;
                    node.prir.next = null;
                    size--;
                }else{
                    node.prir.next=node.next;
                    node.next.prir=node.prir;
                    size--;
                }
            }
            node = node.next;
            
        }
    }
    //修改
    public void Updata(Object elem,Object ele){
        Node node = this.first;
        for(int i = 0;i<size;i++){
            if(elem.equals(node.elem)){
                node.elem = ele;
            }
            node = node.next;
        }
    }
    //用内部类表示一个节点
    class Node{
        private Node prir;//头指针
        private Node next;//尾指针
        private Object elem;//元素
        Node(Object elem){
            this.elem=elem;
        }
    }
    @Override
    public String toString() {
        if(size==0){
            System.out.println("[]");
        }
        StringBuffer stringbuffer = new StringBuffer();
        Node node = this.first;
        stringbuffer.append("[");
        for(int i=0;i<size;i++){
            stringbuffer.append(node.elem);
            if(i != size-1){
                stringbuffer.append(",");
            }else{
                stringbuffer.append("]");
            }
            node = node.next;
        }
        System.out.println("首位元素:"+this.first.elem);
        System.out.println("尾部元素:"+this.last.elem);
        return stringbuffer.toString();
    }
}
public class fx {
    public static void main(String[] args) {
        ken k =new ken();
        k.add("zhangsan");
        k.addlast("zhaosi");
        k.add("zhaoliu");
        k.addlast("qian");
        k.add("qiansan");
        k.Updata("qian", "we");
        //k.removefirst("qiansan");
        //k.addmid("wangwu");
        //k.remove("qian");
        k.remove("qiansan");
        //System.out.println(k.search("zhangsan"));
        System.out.println(k.toString());
    }
}

 

posted @ 2017-08-30 19:13  sahe  阅读(271)  评论(0)    收藏  举报