leetcode解题报告2. Add Two Numbers

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值