LeetCode 2. Add Two Numbers
Description
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Code
- java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = null, pre = null;
int c = 0, tempSum;
while(l1 != null && l2 != null) {
tempSum = (l1.val+l2.val+c)%10;
c = (l1.val+l2.val+c)/10;
ListNode temp = new ListNode(tempSum);
if(pre == null) {
pre = result = temp;
} else {
pre.next = temp;
pre = temp;
}
l1 = l1.next;
l2 = l2.next;
}
while(l1 != null) {
tempSum = (l1.val+c)%10;
c = (l1.val+c)/10;
ListNode temp = new ListNode(tempSum);
pre.next = temp;
pre = temp;
l1 = l1.next;
}
while(l2 != null) {
tempSum = (l2.val+c)%10;
c = (l2.val+c)/10;
ListNode temp = new ListNode(tempSum);
pre.next = temp;
pre = temp;
l2 = l2.next;
}
if(c != 0) {
ListNode temp = new ListNode(c);
pre.next = temp;
pre = temp;
}
if(pre != null) {
pre.next = null;
}
return result;
}
}
- 评论区代码
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode preHead(0), *p = &preHead;
int extra = 0;
while (l1 || l2 || extra) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra;
extra = sum / 10;
p->next = new ListNode(sum % 10);
p = p->next;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
}
return preHead.next;
}
Conclusion
- 可以多创建一个结点作为头结点的前一个结点,方便后续操作