链表(LinkedList)

来源:互联网 发布:第二人称的小说知乎 编辑:程序博客网 时间:2024/06/16 00:39

原文地址:http://www.tianshouzhi.com/api/tutorials/basicalgorithm/44

原文中SingleLinkList的remove方法有问题,因为是” Node current=firstNode.getNext();”,所以导致链表的第一个节点删不掉。

修改如下:

public class SingleLinkList<T> {    // 链表中第一个节点    protected Node firstNode = null;    // 链表中维护的节点总量    protected int size;    /**     * 每次添加都是添加到最前面     * @param element     */    public void addFirst(T element){        Node node = new Node();        node.setData(element);        node.setNext(firstNode);        firstNode = node;        size++;    }    /**     * 删除某个节点     * @param element     * @return 删除成功返回true,失败返回false     */    public boolean remove(T element){        if(size == 0){            return false;        }        if(element.equals(firstNode.getData())){ // 如果删除首节点            Node temp = firstNode;            firstNode = firstNode.getNext();            temp = null;            size--;            return true;        }        // 如果删除除首节点之外的其他节点        Node pre = firstNode;        Node current = pre.getNext();        while(current != null){            if((current.getData() == null && element == null) ||                    (element.equals(current.getData()))){                pre.setNext(current.getNext()); // 删除这个节点,将上一个节点指向这个节点的下一个节点                current = null;                size--;                return true;            }            pre = current;  // 如果不是,上一个节点指向这个节点            current = current.getNext();        }        return false;    }    /**     * 是否包含某个元素     * @param element     * @return 包含返回true,否则返回false     */    public boolean contains(T element){        if(size == 0){            return false;        }        Node current = firstNode;        while(current != null){            if((current.getData() == null && element == null) ||                    (element.equals(current.getData()))){                return true;            }            current = current.getNext();        }        return false;    }    public boolean isEmpty(){        return size == 0;    }    public int size(){        return size;    }    /**     * 打印出所有的元素     */    public void display(){        if(!isEmpty()){            Node current = firstNode;            while(current != null){                System.out.print(current.getData() + "\t");                current = current.getNext();            }        }    }}


原创粉丝点击