java实现单链表

来源:互联网 发布:写c语言是用记事本么 编辑:程序博客网 时间:2024/06/07 09:30

单链表的概念参照这个完全可以理解http://baike.baidu.com/link?url=-1uzZ37pcZwpN-1Zy2lCassJ2YqPQzjIPbQHdPXCwo0pGR5-sXiEY8kXNUjt2DubG_8JTSQBJrhTF182Kwo5Wq

下面是我的程序:

新建一个名为Node的类,data是数据域,而next是指针域

package singleLinkedList;/** * Created by lzh on 2/29/16. */public class Node {    public Node next;    public Object data;//    public Node(){}    public Node(Object data){        this.data = data;    }}

在写一个

package singleLinkedList;/** * Created by lzh on 2/29/16. */public class SingleLinkedList extends RuntimeException{    private Node first;    private int length;    public SingleLinkedList(){        init();    }    /**     * initialize SingleLinkedList     */    private void init(){        this.first = null;    }    /**     *     * @param data insert data     * @param locate insert location     */    public void insert(Object data,int locate){        if(locate < 0){            throw new RuntimeException("please input valid locate");        }else if(locate == 0){            insert(data);        }else {            add(data,locate);        }    }    private void add(Object data,int locate){        Node newNode = new Node(data);        Node curr = first;        int currLocate = 1;        while(curr.next != null){            if(currLocate == locate){                newNode.next = curr.next;                curr.next = newNode;                length++;                currLocate++;            }else{                curr = curr.next;                currLocate++;            }        }        if(currLocate == locate){            curr.next = newNode;            length++;            currLocate++;        }else if(currLocate< locate){            throw new RuntimeException("locate is out if size");        }    }    /**     *     * @param data insert data,default insert into first location of the SingleLinkList     */    public void insert(Object data){        Node insert = new Node(data);        insert.next = first;        first = insert;        length++;    }    /**     *     * @param data remove data of the SingleLinkedList     * @return remove data     */    public Object remove(Object data){        Node curr = first;        boolean flag = false;        if((curr.data).equals(data)){            first = curr.next;            length--;            flag = true;        }        while(curr.next != null){            if((curr.next.data).equals(data)){                if(curr.next.next != null){                    curr.next = curr.next.next;                    length--;                }else{                    curr.next = null;                }                flag = true;            }            curr = curr.next;        }        return flag;    }    /**     *     * @param data find data in the SingleLinkedList     * @return     */    public boolean find(Object data){        Node curr = first;        while(curr != null){            if((curr.data).equals(data)){                return true;            }else{                curr = curr.next;            }        }        return false;    }    /**     *     * @return the length of the SingleLinkedList     */    public int size(){        return length;    }    public void listAll(){        Node curr = first;        if(curr == null){            System.out.println("this SingleLinkedList is empty");        }else{            while(curr != null){                System.out.println(curr.data);                curr = curr.next;            }        }    }    public boolean isEmpty(){        if(first == null){            return true;        }else {            return false;        }    }}


1 0