我知道我的代码的问题是(应该)是愚蠢的。但是会感激所有的帮助。
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.next
为ListNode
且list2
为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;
}
答案 0 :(得分:1)
你想要向下移动列表,而current.next不等于null。否则,您从列表中“跳出”到空指针上。
例如......
while(current.next != null){
current = current.next
}
一旦下一个节点为空,循环将退出,current
将等于列表中的最后一个节点。
所以,这将使你达到列表一的最后一个元素。然后将列表2的所有元素追加到列表1的末尾(提示:当前应该指向列表2的第一个元素)
修改强>
正如Ted Hopp所说,您在特定链接列表实现上提供的信息有点不稳定,所以我将解释一般情况。
您应该将当前值分配给当前存储的节点。这可能应该从列表中的第一个节点开始。在上面的示例中,您似乎正在这样做,但我不知道您的front
来自哪里。它在哪里赋值?宣布在哪里?我猜你的前面是空的可能是因为你错误地将它指向前端节点。
答案 1 :(得分:1)
如果你发布了LinkedIntList
和ListNode
的类定义,它会有所帮助,并告诉我们这个方法实际上应该做什么。但我假设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;
}