我的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方法以显示正确的结果。 Pleae不建议递归方式,因为我已经意识到这一点。这个问题的要点是我想澄清我的面向对象的概念。
有关详细信息,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类有一个全局声明
首先是私有节点;
答案 0 :(得分:1)
初始化LinkedList会生成一个空的LinkedList对象,然后您必须使用节点填充该对象。您的总和LinkedList没有节点,因此您无法将节点k分配给sum.first。
要解决此问题,您需要使用Node k = new Node(); 但是最好在LinkedList实现中使用/创建一个add()方法来处理这个问题,以及remove()方法。这样您就不需要在求和链接列表中同时创建和跟踪节点。
除此之外,你应该注意检查head1和head2在求和之前都不等于null,否则你将被限制为相同数字长度的数字。