本文主要是介绍leetcode 题解 2. Add Two Numbers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
leetcode的第二题,这一题实际上已经将问题做了简化,链表已经进行了逆序,因此只要从后向前处理即可。
这里有几点需要注意的问题:
两个数相加后结果可能大于10,因此需要主要进位的问题。
两个链表的长度可能不同,若一个链表为空,则将其值设为0。
若最后的结果仍然大于10,则还要再进一位。
直接将结果贴出来。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {if(l1==NULL) return l2;if(l2==NULL) return l1;int add = 0;int sum = 0;int tempSum = 0;int l1val = 0;int l2val = 0;struct ListNode* result = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = result;struct ListNode* nxt;struct ListNode* pre;while(l1!=NULL||l2!=NULL){if(l1) l1val = l1->val;else l1val = 0;if(l2) l2val = l2->val;else l2val = 0;tempSum = l1val + l2val + add;sum = tempSum%10;add = tempSum/10;cur->val = sum;if(l1!=NULL) l1 = l1->next;if(l2!=NULL) l2 = l2->next;nxt = (struct ListNode*)malloc(sizeof(struct ListNode));cur->next = nxt;pre = cur;cur = nxt;}if(add!=0){cur->val = add;pre = cur;}pre->next = NULL;return result;}
贴一段java代码,简洁很多,上面的C代码过于复杂了。
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if(l1==null) return l2;if(l2==null) return l1;ListNode list_result = new ListNode(-1);ListNode list_pointer = list_result;int sum = 0;while(l1!=null||l2!=null){if(l1!=null){sum += l1.val;l1 = l1.next;}if(l2!=null){sum += l2.val;l2 = l2.next;}list_pointer.next = new ListNode(sum%10);sum = sum/10;list_pointer = list_pointer.next;}if(1==sum) list_pointer.next = new ListNode(1);return list_result.next;}
}
这篇关于leetcode 题解 2. Add Two Numbers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!