2

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

在此处输入图像描述

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.nextisListNodelist2is LinkedIntList

如果我宁愿使用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;

}
4

2 回答 2

1

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

例如...

while(current.next != null){

 current = current.next

}

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

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

编辑

正如 Ted Hopp 下面所述,您提供的有关特定链表实现的信息有点参差不齐,所以我将解释一个一般情况。

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

于 2013-01-23T01:55:22.230 回答
1

如果您发布了 and 的类定义LinkedIntListListNode并且告诉我们这个方法实际上应该做什么,那将会有所帮助。但是我假设 aLilnkedIntList包含一个ListNode front成员,并且您正在尝试将内容附加到list2to 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;

}
于 2013-01-23T01:55:32.767 回答