1、源码,转自:https://blog.youkuaiyun.com/sinat_41144773/article/details/88091467
1)
public class ListNode {
int val;
ListNode next; // 下一个链表对象
ListNode(int x) { val = x; } //赋值链表的值
2)
package test;
import org.testng.annotations.Test;
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//生成ListNode链表对象,链表的值为0,没有指向的节点
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
//两个链表的同一位赋值给变量x和y
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10; //这里的carry循环时在上面这个式子用int sum = carry + x + y;
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;
}
@Test
public void test()
{
ListNode L1=new ListNode(3);
ListNode L1_2=new ListNode(4);
ListNode L1_3=new ListNode(2);
L1.next=L1_2;
L1_2.next=L1_3;
L1_3.next=null;
ListNode L2=new ListNode(4);
ListNode L2_2=new ListNode(6);
ListNode L2_3=new ListNode(5);
L2.next=L2_2;
L2_2.next=L2_3;
L2_3.next=null;
ListNode solution=addTwoNumbers(L1,L2);
while(solution!=null)
{
System.out.println(solution.val);
solution=solution.next;
}
}
}
2、运行结果
7
0
8