本文共 1284 字,大约阅读时间需要 4 分钟。
题目链接:
这一题的意思是:将链表表示的两个数加起来,没什么好的办法,同时遍历两个链表就OK!需要注意进位问题!
具体的看代码:
class Solution {public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { if (!l1) return l2; if (!l2) return l1; ListNode res(-1); ListNode *tail = &res; // 初始化进位=0 int carry = 0; // 同时遍历两个链表 while (l1 && l2){ // 注意:计算相加值 ListNode *tmp = new ListNode((carry + l1->val + l2->val) % 10); tail->next = tmp; tail = tmp; // 注意进位值 carry = (carry + l1->val + l2->val) / 10; l1 = l1->next; l2 = l2->next; } // 可能两个数的大小位数不一样,所以继续遍历 // while (l1){ ListNode *tmp = new ListNode((carry + l1->val) % 10); tail->next = tmp; tail = tmp; carry = (carry + l1->val) / 10; l1 = l1->next; } while (l2){ ListNode *tmp = new ListNode((carry + l2->val) % 10); tail->next = tmp; tail = tmp; carry = (carry + l2->val) / 10; l2 = l2->next; } // 最后一位的进位需要特别注意! // if (carry){ ListNode *tmp = new ListNode(carry); tail->next = tmp; } return res.next; }};
转载地址:http://woaci.baihongyu.com/