您的位置:首页 > 编程语言 > Java开发

单向单链表的java实现

2010-12-02 18:59 477 查看
 Java代码 

package datamemory.link;  

  

//单链表  

public class ObjectLink  

{  

    private int size;// 链表长度  

      

    private ObjectNode head;// 头节点  

      

    public void add(Object obj)  

    {  

        ObjectNode node = new ObjectNode(obj, null);  

        if (head == null)  

        {  

            head = node;  

        }  

        else  

        {  

            ObjectNode temp = head;  

            while (temp.getNext() != null)  

            {  

                temp = temp.getNext(); // 移动到最后的节点  

                  

            }  

            temp.addNodeAfter(obj);  

            size++;// 表的长度+1;  

        }  

    }  

      

    public int getSize()  

    {  

        return size;  

    }  

      

    public Object get(int i)  

    {  

        if (i > size - 1)  

        {  

            return null;  

        }  

        ObjectNode temp = head;  

        for (int k = 0; k < i; k++)  

        {  

            temp = temp.getNext();  

        }  

        return temp;  

    }  

      

    public int indexOf(Object obj)  

    {  

        int i = 0;  

        ObjectNode node = new ObjectNode(obj, null);  

        if (head == null)  

            return -1;  

        if (head.equals(node))  

            return 0;  

        ObjectNode temp = head;  

        while (temp.getNext() != null)  

        {  

            i++;  

            if (temp.getNext().equals(node))  

            {  

                return i;  

            }  

            temp = temp.getNext();  

        }  

          

        return -1;  

    }  

      

    public void remove(Object obj)  

    {  

        ObjectNode node = new ObjectNode(obj, null);  

        if (head != null)  

        {  

            if (head.equals(node))  

                head = head.getNext();// 设置第二节点为头节点  

            else  

            {  

                ObjectNode temp = head;  

                while (temp.getNext() != null)  

                {  

                    if (temp.getNext().equals(node))  

                    {  

                        temp.removeNodeAfter();// 删除该节点之后的节点  

                        size--;  

                        break;  

                    }  

                }  

            }  

        }  

    }  

      

}  

   节点类:

Java代码 

package datamemory.link;  

  

//单链节点  

public class ObjectNode  

{  

      

    private Object data;  

      

    private ObjectNode next;  

      

    public ObjectNode(Object data, ObjectNode next)  

    {  

        super();  

        this.data = data;  

        this.next = next;  

    }  

      

    protected Object getData()  

    {  

        return data;  

    }  

      

    protected void setData(Object data)  

    {  

        this.data = data;  

    }  

      

    // 在改节点之后添加新节点  

    public void addNodeAfter(Object obj)  

    {  

        ObjectNode node = this.next;  

        if (node == null)// 当改节点是尾节点时,把新加的节点设置为尾节点  

        {  

            this.next = new ObjectNode(obj, null);  

        }  

        else  

        // 把该节点设置为下一节点,原先的节点为新节点的下一节点  

        {  

            this.next = new ObjectNode(obj, node);  

        }  

    }  

      

    public void removeNodeAfter()  

    {  

        if (next != null)  

        {  

            next = next.next;// 设置下一节点为下下个节点  

        }  

    }  

      

    protected ObjectNode getNext()  

    {  

        return next;  

    }  

      

    protected void setNext(ObjectNode next)  

    {  

        this.next = next;  

    }  

      

    public boolean equals(Object obj)  

    {  

        if (obj instanceof ObjectNode)  

        {  

            ObjectNode node = (ObjectNode)obj;  

            if (node.getData() == this.data)// 指向的对象是同一个对象  

            {  

                return true;  

            }  

        }  

        return false;  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java null