Leetcode解题笔记 2.Add Two Numbers [Medium]

来源:互联网 发布:公安网络攻防测试 编辑:程序博客网 时间:2024/05/18 00:16

解题思路

其实题目没有提到几个坑,题目没提到边界的问题,就是两条链的长度可能不相同,没有数据的话也可以通过前面两个数相加得到的进位创建一个新的节点,本来代码写得很乱很复杂,后来利用? :重构了代码,使得代码更加容易明白。

代码

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {    ListNode* iter1 = l1;    ListNode* iter2 = l2;    ListNode *temp = NULL, *result = NULL;    int v1, v2;    int carryBit = 0;    int tempVal = 0;    while (iter1 != NULL || iter2 != NULL) {        v1 = iter1 ? iter1->val : 0;        v2 = iter2 ? iter2->val : 0;        int sum = v1 + v2 + carryBit;        tempVal = sum % 10;        carryBit = sum / 10;        // 判断是否是第一个数据        if (result == NULL) {            result = temp = new ListNode(tempVal);        } else {            temp->next = new ListNode(tempVal);            temp = temp->next;        }        iter1 = iter1 ? iter1->next : iter1;        iter2 = iter2 ? iter2->next : iter2;    }    //最后一个是否存在进位判断    if (carryBit != 0) {        temp->next = new ListNode(carryBit);    }    return result;}

时间复杂度

O(n) :只是简单遍历了两条链路,所以不存在什么复杂度问题。

原创粉丝点击