链接列表:数据类型不匹配

时间:2013-01-23 01:51:07

标签: java linked-list

我知道我的代码的问题是(应该)是愚蠢的。但是会感激所有的帮助。

enter image description here

public void transferFrom(LinkedIntList list2) {

   // Point to first node of list1
   ListNode current = front;

   // Move to the last node of list1
   while(current != null) {
      current = current.next;
   }

   // Last node of list1 -> firs node of list2
   current.next = list2;

   list2 = null;

}

问题行是current.next = list2;。数据类型不匹配,因为current.nextListNodelist2LinkedIntList

如果我宁愿使用current.next = list2;,我会获得此行的NullPointerException

我该怎么办?

编辑:已修复!

public void transferFrom(LinkedIntList list2) {

   // Point to first node of list1
   ListNode current = front;

   // Move to the last node of list1
   while(current != null && current.next != null) {
      current = current.next;
   }

   // Last node of list1 -> first node of list2
    if(front == null) {
        front = list2.front;
    } else {
        current.next = list2.front;
   }

   list2.front = null;

}

2 个答案:

答案 0 :(得分:1)

你想要向下移动列表,而current.next不等于null。否则,您从列表中“跳出”到空指针上。

例如......

while(current.next != null){

 current = current.next

}

一旦下一个节点为空,循环将退出,current将等于列表中的最后一个节点。

所以,这将使你达到列表一的最后一个元素。然后将列表2的所有元素追加到列表1的末尾(提示:当前应该指向列表2的第一个元素)

修改

正如Ted Hopp所说,您在特定链接列表实现上提供的信息有点不稳定,所以我将解释一般情况。

您应该将当前值分配给当前存储的节点。这可能应该从列表中的第一个节点开始。在上面的示例中,您似乎正在这样做,但我不知道您的front来自哪里。它在哪里赋值?宣布在哪里?我猜你的前面是空的可能是因为你错误地将它指向前端节点。

答案 1 :(得分:1)

如果你发布了LinkedIntListListNode的类定义,它会有所帮助,并告诉我们这个方法实际上应该做什么。但我假设LilnkedIntList包含ListNode front成员,并且您尝试将list2的内容附加到this(这是另一个LinkedIntList )。你的麻烦行应该是:

current.next = list2.front;

但是,您还有另一个问题:您的while循环可以保证退出current == null,这根本不是您想要的。循环条件应为(current.next != null),而不是(current != null)

最后,如果您要清空list2,那么执行此操作的方法是list2.front = null;。在方法内部分配list2不会做任何事情。

以下是包含我所有建议的代码版本:

public void transferFrom(LinkedIntList list2) {

   if (front == null) {
       front = list2.front;
   } else {
       // Point to first node of list1
       ListNode current = front;

       // Move to the last node of list1
       while(current.next != null) {
          current = current.next;
       }

       // Last node of list1 -> firs node of list2
       current.next = list2;
   }

   // empty out list2
   list2.front = null;

}