每个人
我写了一个代码来解决这个问题:
编写一个Java函数Sum2List,它获取两个相同大小的列表L1和L2,并返回包含列表L1和L2的相应节点内的数据总和的列表L
ex : l1 = {1,2,3}
l2 = {4,5,6}
l = l1 + l2 => {5,7,9}
我的代码是:
public class Test {
public static List Sum2List (List l1 , List l2){
List l = new List();
ListNode lNode = new ListNode(0,null);
l.first = lNode;
ListNode p = l1.first;
ListNode q = l2.first;
for (p = l1.first; p.next!=null; p=p.next,q=q.next){
lNode.data = p.data + q.data;
if (p.next != null)
lNode.next = new ListNode(0,null);
}
return l;
}
public static void main (String[] args){
List l1= new List();
ListNode node4 = new ListNode(4,null);
ListNode node3 = new ListNode(3,node4);
ListNode node2 = new ListNode(2,node3);
ListNode node1 = new ListNode(1,node2);
l1.first = node1;
List l2= new List();
ListNode node8 = new ListNode(8,null);
ListNode node7 = new ListNode(7,node8);
ListNode node6 = new ListNode(6,node7);
ListNode node5 = new ListNode(5,node6);
l2.first = node5;
List l = Sum2List(l1,l2);
for(ListNode p = l.first; p.next !=null; p=p.next){
System.out.println(p.data);
}
}
}
问题是输出是(10),而它必须是列表包含=> 5,7,9
那么,代码中的错误在哪里?
答案 0 :(得分:2)
问题是您不会在返回的列表中添加任何新节点。您总是在修改第一个节点的数据。
目前,您的方法是对两个列表的倒数第二个节点的数据求和,因此您返回的列表只包含一个节点,其总和为3和7(= 10)。
您需要在每次迭代时创建一个新节点并更新前一个节点的下一个节点。所以像这样:
for (p = l1.first; p != null; p = p.next, q = q.next){
lNode.data = p.data + q.data;
ListNode temp = new ListNode(0, null);
lNode.next = temp;
lNode = temp;
}
另请注意,您应将for条件修改为p!=null
,否则您将不会遍历最后一个节点。
如果您使用调试器(或使用笔和纸张)浏览代码,您可以在比此处发布问题更短的时间内解决此问题。
答案 1 :(得分:0)
您没有进入新节点。
for (p = l1.first; p.next!=null; p=p.next,q=q.next){
lNode.data = p.data + q.data;
if (p.next != null){
lNode.next = new ListNode(0,null);
lNode = lNode.next;
}
}
添加行lNode = lNode.next;以及if块周围的大括号。
如果不运行它,我不确定这是不是问题,但它肯定是它的一部分