leetcode解题报告2. Add Two Numbers

来源:互联网 发布:全国网络统考系统 编辑:程序博客网 时间:2024/05/18 00:01

leetcode解题报告2. Add Two Numbers

题目地址

难度是medium

题目描述

用单链表来表示一个大整数,其中单链表的每个节点只有一个数0~9。给两个这样单链表表示的整数,求它们的和(还是用单链表表示)

我的思路

题目比较难看懂,刚开始还以为只是把单链表对应节点相加而已,没想到是把单链表看着一个整数相加,这样的话,要考虑进位了。
理解题目之后就不难了,难点在于
1. 单链表的操作(考验数据结构知识)
2. 各种情况的考虑,比如两个列表的长度不一样,再比如,在最后一位相加后,还有进位等情况。

我的代码

/** * 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* head = new ListNode(0);        ListNode* cur = head;        short flag = 0; //进位标示        //注意可能l1和l2的长度不一定一样        while (l1 != NULL || l2 != NULL) {            int lv1, lv2;            if (l1 == NULL) {                lv1 = 0;            } else {                lv1 = l1->val;                l1 = l1->next;            }            if (l2 == NULL) {                lv2 = 0;            } else {                lv2 = l2->val;                l2 = l2->next;            }            short v = lv1 + lv2 + flag; //优化点,因为数字范围是0到9,用short就好            flag = v / 10;            v = v % 10;            cur->next = new ListNode(v);            cur = cur->next;        }        //处理最后一位相加之后的进位        if (flag > 0) {            cur->next = new ListNode(flag);        }        return head->next;    }};

阅读官方题解

官方题解

基本和我想的差不多。

思想核心总结

看懂题目要求,不要理解错了
注意各种特殊情况
熟练链表的操作

0 0
原创粉丝点击