题目链接:2. Add Two Numbers
题目大意:给你由两个链表组成得数,链表上得每个位置得值代表一个位得值,例如3->8->4就代表483这个值,然后两个链表相加,返回结果。
题目思路:简单题,每次相加得时候记录一次进位就可以了,只不过处理链表得时候比较麻烦,具体看代码
时间复杂度&&空间复杂度:O(max(n,m))&&O(n+m)(n,m分别为两链表长度)
/**
* 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* l3 = new ListNode(0);
ListNode* l4 = l3;
int flag = 0;
while(l1||l2||flag){
int x = l1?l1->val:0;
int y = l2?l2->val:0;
l4->next = new ListNode((x+y+flag)%10);
l4 = l4->next;
flag = (x+y+flag)/10;
if(l1) l1 = l1->next;
if(l2) l2 = l2->next;
}
return l3->next;
}
};