假定用一个链表表示两个数,其中每个节点仅包含一个数字。假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
public ListNode addLists2(ListNode l1, ListNode l2) {
// write your code here
l1 = reverseList(l1);
l2 = reverseList(l2);
return addList(l1, l2);
}
private ListNode reverseList(ListNode listnode){
ListNode head = null;
ListNode node;
if (listnode == null){
return null;
}
while (listnode != null){
node = new ListNode(listnode.val);
node.next = head;
head = node;
listnode = listnode.next;
}
return head;
}
private ListNode addList(ListNode l1, ListNode l2){
int val, carry = 0;
ListNode head = null, node = null, l = null;
while (l1 != null && l2 != null){
val = l1.val + l2.val + carry;
carry = val / 10;
val = val % 10;
node = new ListNode(val);
node.next = head;
head = node;
l1 = l1.next;
l2 = l2.next;
}
if (l1 != null){
l = l1;
}
if (l2 != null){
l = l2;
}
while (l != null){
val = l.val + carry;
carry = val / 10;
val = val % 10;
node = new ListNode(val);
node.next = head;
head = node;
l = l.next;
}
if (carry != 0){
node = new ListNode(carry);
node.next = head;
head = node;
}
return head;
}
}