leetcode_add_two_numbers_ii 发表于 2016-12-01 难度:Medium 解题思路:因为链表从前到后,是由高到低位。所以这里进行了翻转,然后计算。将链表之和放在了l1上,如果l2的长度超出了l1,则将超出的部分,接到l1的尾部。 代码如下: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667/** * 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) { l1 = reverseLinkedList(l1); l2 = reverseLinkedList(l2); ListNode *l1_cur = l1; ListNode *l2_cur = l2; ListNode *l1_cur_pre = NULL; ListNode *l2_cur_pre = NULL; int add = 0; while(l1_cur != NULL && l2_cur != NULL) { int sum = add + l1_cur->val + l2_cur->val; add = (sum >= 10)?1:0; // cout<<add<<endl; sum = sum % 10; l1_cur->val = sum; l1_cur_pre = l1_cur; l2_cur_pre = l2_cur; l1_cur = l1_cur->next; l2_cur = l2_cur->next; } if(l2_cur != NULL) { l1_cur_pre->next = l2_cur; l2_cur_pre->next = NULL; l1_cur = l1_cur_pre->next; } while(l1_cur != NULL) { int sum = add + l1_cur->val; add = (sum >= 10)?1:0; sum = sum % 10; l1_cur->val = sum; l1_cur_pre = l1_cur; l1_cur = l1_cur->next; } if(add == 1) { ListNode* new_node = new ListNode(add); l1_cur_pre->next = new_node; } l1 = reverseLinkedList(l1); return l1; } ListNode* reverseLinkedList(ListNode* head) { ListNode *cur = head; ListNode *pre = NULL; while(cur != NULL) { ListNode *ne = cur->next; cur->next = pre; pre = cur; cur = ne; } return pre; }}; 运行结果:35ms,超过61.02%