LeetCode Add Two Numbers两个链表数值相加

来源:互联网 发布:华为云计算部门结构 编辑:程序博客网 时间:2024/05/18 19:46

Add Two Numbers

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

相当于无限加了,就是用了链表来存储数据。

本题就是考对链表的操作和模拟加法。

第一种方法:

 这个跟合并两个有序链表成一个有序链表的程序结构是一样的。

 

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {int carry = 0;int sum = 0;ListNode *sumList = new ListNode(-1);ListNode *cur = sumList;int l1val, l2val;while (l1 && l2){l1val = l1->val;l2val = l2->val;l1 = l1->next;l2 = l2->next;sum = carry + l1val + l2val;carry = sum/10;sum %= 10;cur->next = new ListNode(sum);cur = cur->next;}while (l1){l1val = l1->val;l1 = l1->next;sum = carry + l1val;carry = sum/10;sum %= 10;cur->next = new ListNode(sum);cur = cur->next;}while (l2){l1val = l2->val;l2 = l2->next;sum = carry + l1val;carry = sum/10;sum %= 10;cur->next = new ListNode(sum);cur = cur->next;}if (carry != 0){cur->next = new ListNode(carry);}ListNode *t = sumList->next;delete sumList;return t;}


 

这样也许简洁一点,逻辑是差不多的,就是处理数据有点不一样。

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {ListNode *sumList = new ListNode(-1);ListNode *cur = sumList;int carry = 0;while (l1 != nullptr || l2 != nullptr || carry != 0) {int l1val = l1 == nullptr ? 0 : l1->val;int l2val = l2 == nullptr ? 0 : l2->val;int sum = l1val + l2val + carry;carry = sum / 10;sum %= 10;cur->next = new ListNode(sum);cur = cur->next;l1 = l1 == nullptr ? nullptr : l1->next;l2 = l2 == nullptr ? nullptr : l2->next;}ListNode *t = sumList->next;delete sumList;return t;}