为什么我的单链接列表实现在添加对象后两次给我第一个元素?

时间:2017-06-01 14:21:44

标签: java collections linked-list singly-linked-list

我在这里尝试实施" 单链接列表"的基本操作。 但只有在这里,我才面临一个问题,那就是在添加元素之后,即

al.add("Ravi");
al.add("Vijay");
al.add("Sanjay");
al.add("Ajay"); 

我得到的输出为:
[] --------->对于空的链接列表
[ Ravi,Ravi ,Vijay,Sanjay,Ajay] ------>添加元素后。

class MyLinkedList {
        private Node first;
        private Node last;
        private int count;

        public void add(Object ele){
            if(first==null){
                first=new Node(ele);
                last=first;
                count++;
            }
            last.next=new Node(ele);
            last=last.next;
            count++;
        }
        public int size(){
            return count;
        }
        public Object get(int index){
            if(index>=size())throw new IndexOutOfBoundsException();
            Node p=first;
            for(int i=0;i<=index;i++){
                p=p.next;
            }
            return p.ele;
        }
        public void remove(int index){
            if(index>=size())throw new IndexOutOfBoundsException();
            if(index==0){
                first=first.next;
                count--;
                return;
            }
        }

        @Override
        public String toString() {
            if(size()==0)return "[]";
            Node p=first;
            String s="[" + p.ele;
            while(p.next!=null){
                p=p.next;
                s+=","+p.ele;
            }
            return s + "]";
        }

        private class Node{
            Object ele;
            Node next;
            Node(Object ele){
                this.ele=ele;
            }
        }

        public static void main(String[] args) {
             MyLinkedList al=new MyLinkedList(); 
             System.out.println(al);
              al.add("Ravi");  
              al.add("Vijay");  
              al.add("Sanjay");  
              al.add("Ajay");
              System.out.println(al);

        }

    }

2 个答案:

答案 0 :(得分:3)

因为你添加了两次:

    public void **add**(Object ele){
        if(first==null){
            first=new Node(ele); //First
            last=first;
            count++;
        }
        last.next=new Node(ele); //second.
        last=last.next;
        count++;
    }

添加一个else语句:

    public void **add**(Object ele){
        if(first==null){
            first=new Node(ele);
            last=first;
            count++;
        } else {
          last.next=new Node(ele);
          last=last.next;
          count++;
        }
    }

答案 1 :(得分:2)

在你的方法中:

 public void **add**(Object ele){
    if(first==null){
       first=new Node(ele);
       last=first;
       count++;
    }
    last.next=new Node(ele);
    last=last.next;
    count++;
 }

您必须在if子句的末尾添加return语句,或使用else。否则你要添加第一个元素两次。