我的方法和思路:
把两链表转换为数,然后相加,再转换为链表,事实证明,我的思路完全错误了,刚开始我将数字全设为int,后来设为long,但是最大只能支持有限位数。所以在思路上就已经错了
我的代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int tem = 0;
long i1 = 0, i2 = 0;
while (l1 != null) {
i1 += (long) (l1.val * Math.pow(10, tem));
tem++;
l1 = l1.next;
}
tem = 0;
while (l2 != null) {
i2 += (long) (l2.val * Math.pow(10, tem));
tem++;
l2 = l2.next;
}
System.out.println(i1);
System.out.println(i2);
long sum1 = i1 + i2;
tem = 0;
long sum2 = sum1;
while (sum2 > 0) {
sum2 = sum2 / 10;
tem++;
}
ListNode node = new ListNode(0);
if (tem == 0) {
return node;
}
ListNode temNode = node;
for (int i = tem; i > 0; i--) {
int nodeVal = (int) (sum1 % 10);
sum1 = sum1 / 10;
temNode.next = new ListNode(nodeVal);
temNode = temNode.next;
}
return node.next;
}
上面的代码,解决普通的几位数相加还可以
正确结果
public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/add-two-numbers/solution/liang-shu-xiang-jia-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
正确结果思路也很好理解,就是链表每个位相加后生成节点