題目描述:給兩個(gè)用非空鏈表表示的非負(fù)整數(shù)匙瘪,數(shù)字從低位到高位是從左到右排列的凌唬,每個(gè)節(jié)點(diǎn)只包含數(shù)的一位。將這兩個(gè)數(shù)的鏈表加為一個(gè)返回。如:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
分析:模擬遍歷兩鏈表耸袜,時(shí)間復(fù)雜度O(n + m),空間O(n)牲平。
代碼:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode l(-1);
int c = 0;
ListNode *pre = &l;
for (ListNode *pa = l1, *pb = l2; pa != nullptr || pb != nullptr; pa = pa == nullptr? nullptr : pa -> next, pb = pb == nullptr? nullptr : pb -> next, pre = pre -> next)
{
int ai = pa == nullptr? 0 : pa -> val;
int bi = pb == nullptr? 0 : pb -> val;
int v = (ai + bi + c) % 10;
c = (ai + bi + c) / 10;
pre -> next = new ListNode(v);
}
if (c > 0)
pre -> next = new ListNode(c);
return l.next;
}
};