思路:很简单,从表头开始对应相加,标记一下是否进位,题目说了每个节点只能是个位数,所以进位只能是1。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode L = new ListNode();
ListNode l = L;
ListNode p = l1;
ListNode q = l2;
boolean b = false;//标记是否进位
while (p != null && q != null) {
ListNode s = new ListNode(0);
if (b) {
s.val++;//把进位1加上
}
s.val += p.val + q.val;
if (s.val >= 10) {
s.val -= 10;
b = true;
}
else {
b = false;
}
l.next = s;
l = l.next;
p = p.next;
q = q.next;
}
while (p != null) {
ListNode s = new ListNode(0);
if (b) {
s.val++;
}
s.val += p.val;
if (s.val >= 10) {
s.val -= 10;
b = true;
}
else {
b = false;
}
l.next = s;
l = l.next;
p = p.next;
}
while (q != null) {
ListNode s = new ListNode(0);
if (b) {
s.val++;
}
s.val += q.val;
if (s.val >= 10) {
s.val -= 10;
b = true;
}
else {
b = false;
}
l.next = s;
l = l.next;
q = q.next;
}
if (b) {
ListNode s = new ListNode(1);
l.next = s;
}
return L.next;
}
}