【发布时间】:2014-01-03 23:53:17
【问题描述】:
我对我的 OO 概念有一些基本的怀疑。我正在努力解决这个问题
你有两个由一个链表表示的数字,其中每个节点 包含一个数字。数字以相反的顺序存储, 使得 1 的数字位于列表的头部。写一个函数 它将两个数字相加并将总和作为链表返回。 示例 输入:(3 -> 1 -> 5) + (5 -> 9 -> 2) 输出:8 -> 0 -> 8
我知道它可以递归解决,但我尝试的是迭代测试问题。我写的方法是这样的
public LinkedList sum(LinkedList a){
int carry = 0;
Node head1 = a.first;
Node head2 = this.first;
LinkedList sum = new LinkedList();
Node k = sum.first;
if(a.first != null && this.first != null){
k.item = (head1.item+head2.item) % 10;
carry = (head1.item+head2.item) / 10;
}
head1 = head1.next;
head2 = head2.next;
while(head1 != null){
k.next = new Node((head1.item + head2.item + carry) % 10);
carry = (head1.item + head2.item) / 10;
head1 = head1.next;
head2 = head2.next;
k = k.next;
}
return sum;
}
我用来调用它的方法是这样的
LinkedList object1 = new LinkedList();
LinkedList object2 = new LinkedList();
object1.insert(5);
object1.insert(1);
object1.insert(3);
object2.insert(2);
object2.insert(9);
object2.insert(5);
LinkedList object3 = object1.sum(object2);
object3.display();
我在该行中得到一个空指针异常
k.item=(head1.item+head2.item)%10;
如何修改 sum 方法以显示正确的结果。请不要建议递归方式,因为我已经知道了。这个问题的重点是我想澄清我的面向对象的概念。
更多信息 Node 类看起来像这样
class Node {
public int item;
public Node next;
public Node(int val){
item = val;
}
public Node(){}
public void displayNode() {
System.out.println("[" + item + "] ");
}
}
LinkedList 类有一个全局声明
私有节点优先;
【问题讨论】:
-
如果您在该行中得到一个空指针,那么此时 head1、head2 或 k 为空。找出原因。在调试器下运行,或放入一些打印输出,以便您可以跟踪程序的进度。
-
这里没有面向对象的概念。
-
我相信 k 为空。因为当我初始化 LinkedList 对象 sum 时,它的值默认初始化为 null。所以当我尝试 k=sum.first 时。我相信 k 变为空值。如何更改?
标签: java oop object linked-list object-oriented-analysis