0

我正在尝试打印出链表中的所有元素。但是,我无法打印出完整的项目清单。

public void display()
    {
            int count =0;
            if (head == null)
            {
                    System.out.println("List is empty");
            }
            else {
                    ListNode temp = head;
                    while (temp.getNext() != null)
                    {
                            System.out.println(temp.getElement() +" ");
                            count ++;
                            temp = temp.getNext();

                    }
            System.out.println("Total element: "+count);
            }
    }

// 使用的方法

public ListNode getNext()
    {
            return this.next;
    }

    /*get the element of Listnode*/

    public int getElement()
    {
            return this.element;
    }

请告知哪一部分是错误的。

4

4 回答 4

5

您省略了链表的最后一个元素(因为它没有下一个元素)。while条件应该是这样的:

  while (temp != null)
于 2013-09-24T11:09:21.640 回答
1

正如许多答案正确地说您的while循环错过了最后一个条目,因为它在下一个条目为空时退出循环,因此不会调用.getElement()列表中的最后一个条目。这一切都假设您的 ListNodes 设置正确。

改用迭代器

所有这些似乎都在复制迭代器的行为,请考虑使用一个,一个示例如下;

导入 java.util.ArrayList;导入 java.util.Collection;导入 java.util.Iterator;

public class Arraylist{
    public static void main(String[] args){

        Collection<String> al=new ArrayList<String> ();
        al.add("one");
        al.add("two");
        al.add("three");
        
        Iterator<String> iterator=al.iterator();
        
        while(iterator.hasNext()){
            System.err.println(iterator.next());
        }
    }


}
于 2013-09-24T11:06:56.157 回答
1
while (temp.getNext() != null)
{
    System.out.println(temp.getElement() +" ");
    count ++;
    temp = temp.getNext();
}

在打印最后一项之前总是停止。您需要打印该项目,然后在它next为空时停止。

于 2013-09-24T11:08:59.347 回答
1

将您的 while 循环条件更改为:

while (temp != null) 

由于您检查了下一个节点是否存在,而不是如果它不存在,则不会打印当前节点,这将使您打印除最后一个以外的所有元素

于 2013-09-24T11:09:53.433 回答