@Sherlockyang
2018-06-04T03:00:04.000000Z
字数 1209
阅读 583
leetcode
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int e_out=0,e1,e2,e;ListNode* ans;ListNode* ans_point;e1 = l1->val;e2 = l2->val;if(e1+e2<10){e_out = 0;e = e1+e2;}else{e = e1+e2-10;e_out = 1;}ans = new ListNode(e);l1 = l1->next;l2 = l2->next;ans_point = ans;while((l1!=NULL)||(l2!=NULL)){if(l1==NULL&&l2!=NULL){e1 = 0;e2 = l2->val;l2 = l2->next;}if(l1!=NULL&&l2==NULL){e1 = l1->val;e2 = 0;l1=l1->next;}if(l1!=NULL&&l2!=NULL){e1=l1->val;e2=l2->val;l1=l1->next;l2=l2->next;}if(e1+e2+e_out<10){e = e1+e2+e_out;e_out = 0;}else{e = e1+e2+e_out-10;e_out = 1;}ans_point->next = new ListNode(e);ans_point = ans_point->next;}if(e_out == 1){ans_point->next = new ListNode(1);}return ans;}
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {ListNode preHead(0), *p = &preHead;int carry = 0;while (l1 || l2 || carry) {int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;carry = sum / 10;p->next = new ListNode(sum % 10);p = p->next;l1 = l1 ? l1->next : l1;l2 = l2 ? l2->next : l2;}return preHead.next;};
该题其实并不难
主要学到了一些数据结构的用法:
struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};
这个定义很有意思,里面有一条函数的定义。其实这个可以用new ListNode(x)来开辟一个指向这个值的空间。节省了代码书写,提高的了代码的可阅读性。
l1=NULL?用来做判断。然后可以使用l1 ? l1-val : 0这样的表达式来提取数据结构里面值。
最后,我采用了数学归纳法的思路来解决这道题,其实是没有必要的。因为最后可以输出ans.next,这样就比较好的避免了头节点的问题。