本文共 2632 字,大约阅读时间需要 8 分钟。
You are given two linked lists representing two non-negative numbers. 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8这个题思路很easy,但是写的时候细节多,要判断好边界条件。
/** * 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) { if(l1 == NULL) return l2; if(l2 == NULL) return l1; ListNode* l3 = l1; int sum = 0; int nv = 0; while(l1->next != NULL && l2->next != NULL){ sum = l1->val + l2->val + nv; if(sum >=10) { nv = 1; sum -= 10; }else nv = 0; l1->val = sum; l1 = l1->next; l2 = l2->next; } if(l1->next == NULL && l2->next == NULL){ sum = l1->val + l2->val + nv; if(sum >=10) { l1->val = sum-10; ListNode *p = new ListNode(1); l1->next = p; }else l1->val = sum; }else{ if(l1->next != NULL){ sum = l1->val + l2->val + nv; if(sum >=10){ nv =1; sum -= 10; }else nv =0; l1->val = sum; l1 = l1->next; while(l1->next != NULL){ sum = l1->val + nv; if(sum >=10) { nv = 1; sum -= 10; }else nv = 0; l1->val = sum; l1 = l1->next; } if(nv == 1){ l1->val = l1->val +nv; if(l1->val >= 10){ l1->val -= 10; ListNode *p = new ListNode(1); l1->next = p; } } } if(l2->next != NULL){ sum = l1->val + l2->val + nv; if(sum >=10){ nv =1; sum -= 10; }else nv =0; l1->val = sum; l2 = l2->next; l1->next = l2; while(l2->next != NULL){ sum = l2->val + nv; if(sum >=10) { nv = 1; sum -= 10; }else nv = 0; l2->val = sum; l2 = l2->next; } if(nv == 1){ l2->val = l2->val +nv; if(l2->val >=10){ l2->val -= 10; ListNode *p = new ListNode(1); l2->next = p; } } } } return l3; }};
转载地址:http://gctsi.baihongyu.com/