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
将两个链表上的数相加就可以,大于10进一位,注意下相加时候的细节就可以了,我这里
吧prev节点记录下来,这样最后多生成节点的时候便于将最后一个多余的节点删除:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 12 ListNode * curr = new ListNode(0); 13 ListNode * root = curr; 14 ListNode * prev = curr; 15 int currVal = 0; 16 while(l1 != NULL && l2 != NULL){ 17 currVal = l1->val + l2->val; 18 curr->val += currVal; 19 curr->next = new ListNode(curr->val/10); 20 curr->val%=10; 21 prev = curr; 22 curr = curr->next; 23 l1 = l1->next; 24 l2 = l2->next; 25 } 26 while(l1 != NULL){ 27 curr->val += l1->val; 28 curr->next = new ListNode(curr->val/10); 29 curr->val %= 10; 30 prev = curr; 31 curr = curr->next; 32 l1 = l1->next; 33 } 34 while(l2 != NULL){ 35 curr->val += l2->val; 36 curr->next = new ListNode(curr->val/10); 37 curr->val %= 10; 38 prev = curr; 39 curr = curr->next; 40 l2 = l2->next; 41 } 42 if(curr->val == 0){ 43 prev->next = NULL; 44 delete curr; 45 } 46 return root; 47 } 48 };
感觉写的有点麻烦,应该有很多的重复代码可以改正,但是我暂时找不出来了,先这样吧。
LeetCode OJ:Add Two Numbers (相加链表之数)
原文:http://www.cnblogs.com/-wang-cheng/p/4869650.html