算法课程Leetcode作业第三周技术博客

来源:互联网 发布:linux修改字符集编码 编辑:程序博客网 时间:2024/06/07 21:53

算法课程Leetcode作业第三周技术博客

题目:2. Add Two Numbers 难度:medium

题目描述

You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Examples:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

分析

用线性链表表示加法中的每一位,将不存在的位定为0,注意进位就可以解决

代码

/** * 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) {        ListNode* l3 = nullptr;        ListNode* l3_h = nullptr;        int add_1 = 0;        int left, right;        int result = 0;        ListNode* a, *b;        a = l1;        b = l2;        while (a != nullptr || b != nullptr || add_1 != 0) {            if (a == nullptr) {                left = 0;            } else {                left = a -> val;            }            if (b == nullptr) {                right = 0;            } else {                right = b -> val;            }            result = (right + left + add_1) % 10;            if ((left + right + add_1) >= 10) {                add_1 = 1;            } else {                add_1 = 0;            }            if (l3_h == nullptr) {                l3_h = new ListNode(result);                l3 = l3_h;            } else {                l3 -> next = new ListNode(result);                l3 = l3 -> next;            }            if (a != NULL)            a = a -> next;            if (b != NULL)            b = b -> next;        }        return l3_h;    }};

运行结果

image_1bqqcj9hd10201ojq5h237b1l8h9.png-164.8kB
这个结果还是令人比较满意的,基本上不需要再优化了。

原创粉丝点击