• LeetCode 3 两数相加


    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807



    解题思路:
    从链表头开始, 依次相加, 然后每次判断需不需要进位, 如果需要进位, 使用carry 记录值为1 .
    并将当前位对10 取余
    注意两个链表不一样长, 其中一个链表为空, 最后一位相加超出链表长度 这三种情况.

    代码:
        ListNode* Sumlist = new ListNode(0);
        ListNode *p1 = l1, *p2 = l2 ,*curr=Sumlist;
        int carry = 0;
        //两个链表不一样长, 必须同时为空退出循环
        while (p1!=NULL||p2!=NULL)
        {
            //如果一个链表为空, 则值等于0
            int x = (p1 != NULL) ? p1->val : 0;
            int y = (p2 != NULL) ? p2->val : 0;
            //每次都要加上进位.
            int sum = x + y+carry;
                carry = sum / 10;
                sum = sum % 10;
            curr->next = new ListNode(sum);
            curr = curr->next;
            
            p1 = (p1 != NULL) ? p1->next : NULL;
            p2 = (p2 != NULL) ? p2->next : NULL;
        }
        //循环结束时, 还有进位.则往下多加一个链表
        if (carry > 0)
        {
            curr->next = new ListNode(carry);
        }
        return Sumlist->next;


  • 相关阅读:
    lambda表达式
    Java的MongoDB驱动及读写策略
    MongDB主从复制、复制集
    PL/SQL练习
    MySQL数据库MyISAM和InnoDB存储引擎的比较(转)
    Java的垃圾回收概述
    springMVC源码浅析
    ActiveMQ使用总结
    常用的缓存产品比较
    Nginx+tomcat负载均衡并动静态分离
  • 原文地址:https://www.cnblogs.com/derek-dhw/p/10477295.html
Copyright © 2020-2023  润新知