【Leetcode】【Add Two Numbers】【两数相加】【C++】
- 题目: 给定两个非空表示非负数的链表,数字以逆序存储且每个结点存储一个数字,求这两个非负数的和,以链表返回;
- 说明: 注意考虑到进位,以及链表计算完毕后的进位。如 5+5 不等于0,而等于0->1;
- 思路:按照链表格式从左到右相加即可,注意进位,以及链表长度不一致导致的单个数相加。
- 代码:
/** * 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) { int cur=0; int c=0; ListNode* root=new ListNode(0); ListNode* res=root; while(l1 && l2) { res->next=new ListNode(0); res=res->next; cur=c+l1->val+l2->val; c=cur/10; cur=cur%10; res->val=cur; l1=l1->next; l2=l2->next; } while(l1) { res->next=new ListNode(0); res=res->next; cur=c+l1->val; c=cur/10; cur=cur%10; res->val=cur; l1=l1->next; } while(l2) { res->next=new ListNode(0); res=res->next; cur=c+l2->val; c=cur/10; cur=cur%10; res->val=cur; l2=l2->next; } while(c) { res->next=new ListNode(0); res=res->next; cur=c; c=cur/10; cur=cur%10; res->val=cur; } return root->next; } };
转载请注明出处及链接 谢谢