2013-09-11 37 views
1

我正在尝试重新研究数据结构中包含链接列表的几个主题。因为我的最后一堂课工作太久了,不幸的是,我不确定我的代码有什么问题。请给我一些建议如何解决这个问题,如下所示。将整数添加到LInked List中

LinkedList.java

package my.linked.list; 

public class LinkedList<E> { 

    private Listnode<E> items; 
    private Listnode<E> lastNode; 
    int numItems; 

    public LinkedList() { 
     items = new Listnode<E>(null); 
     lastNode = new Listnode<E>(null); 
     numItems = 0; 
    } 

    public void add(E d) { 
     //Listnode<E> temp = new Listnode<E>(d); 
     //lastNode.setNext(temp); 
     lastNode.setNext(new Listnode<E>(d)); 
     lastNode = lastNode.getNext(); 
     numItems++; 
    } 

    //public void add(int pos){ 
    // 
    //} 

    public void remove(Listnode<E> n) { 
     Listnode<E> temp = items; 
     if (items == n) { 
      items = n.getNext(); 
     } 
     while (temp.getNext() != n) { 
      temp = temp.getNext(); 
     } 
     temp.setNext((n.getNext())); 
     numItems--; 
    } 

    //public void remove(int pos) { 
    // 
    //} 

    public boolean isEmpty() { 
     boolean ans = false; 
     if (numItems == 0) { 
      ans = true; 
     } 

     return ans; 
    } 

    public boolean contains() { 
     return false; 
    } 

    public int size() { 
     return numItems; 
    } 

} 

MyLinkedListTest.java

package my.linked.list; 

import java.io.*; 

public class MyLinkedListTest { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     LinkedList myTest = new LinkedList(); 

     // check whether the linkedlist is empty or not 
     boolean ans = false; 
     ans = myTest.isEmpty(); 
     if (ans = true) { 
      System.out.println("This Linked List is empty"); 
     } else { 
      System.out.println("This Linked List is not empty"); 
     } 

     // add operation 
     for (int i=0; i<5; i++){ 
      myTest.add(i); 
      System.out.println(myTest); 
     } 
     System.out.println("Current size of myList : " + myTest.size()); 

    } 

} 

当运行该代码时,收到以下消息。

这个链表是空

[email protected] 

[email protected] 

[email protected] 

[email protected] 

[email protected] 
Current size of myList : 5 

它看起来像我的代码不会增加整数值到LinkedList的数据类型。请让我知道如何解决这个问题。非常感谢提前。

+0

请学习如何调试Java代码(例如:使用eclipse) – gerrytan

+0

有什么问题?您打印清单,而不是其内容。 –

回答

0

您只需重写LinkedList类中的toString()方法,以显示有意义的信息 - 即列表的内容。在当前状态下,LinkedList的实例正在调用Object的默认toString()方法,该方法会打印一个内存地址 - 不是很有用。写这样的事情在LinkedList类:

@Override 
public String toString() { 
    Listnode<E> temp = items; 
    StringBuilder sb = new StringBuilder(); 
    while (temp != null) { 
     sb.append(temp.getValue()).append(", "); // I'm guessing 
     temp = temp.getNext(); 
    } 
    return sb.toString(); 
} 
+0

再次感谢您的帮助。我在我的代码中遵循了你的指示,但仍然得到一些不合理的结果。当我执行System.out.println(myTest.toString())时,我得到的所有内容都是“null”。请让我知道我在这里失踪的点。 –

+0

我写了算法的一般想法(因为你没有发布'Listnode'类的细节)。但只要'toString()'返回一个字符串_and_你正确地遍历列表,它应该可以工作。您需要遍历列表并决定如何创建字符串 - 我不知道您实现的具体细节 –

0

[email protected]看起来不像整数列表的问题吗?这是因为您没有添加toString()方法来遍历列表以打印其元素。

0

它实际上已将整数添加到您的LinkedList中。您可以通过使用调试来查看。 System.out.println(Object o)将自动调用传入的对象的toString()方法,该方法未实现。所以它会打印出指向LInkedList的指针。

[email protected]是指向LinkedList的指针。