• LeetCode 2 两数相加


    链接:https://leetcode-cn.com/problems/add-two-numbers

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

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

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

    示例:

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

    这道题呢,简化了难度,因为链表的顺序就是我们平时计算两个数之和的顺序,都是从低位开始加。比如平时我们计算342+465,也是先计算2+5,对吧~

    然后求的和变成一个新的结点,在组合新链表的时候,也不必采用头插法,因为返回的链表也是倒序哈哈哈。

    要注意的有两个点,一个是有进位的情况,我们可以用一个变量来表示进位,进位就是sum/10,而结点的值是sum%10。

    还有就是当链表长度不一样时,如果链表遍历到空了,我们把它的值记为0就好~

    对了,不要忘记加上最后最后一步的进位噢,可以在while循环条件里设置,当carry为1时,继续再循环一次即可!

    c++代码如下:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    12         ListNode* l3 = new ListNode(-1);
    13         auto dummy = l3;
    14         int carry = 0;
    15         
    16         while(l1 || l2 || carry){
    17             int p = l1 ? l1->val : 0;
    18             int q = l2 ? l2->val : 0;
    19             int sum = p + q + carry;
    20             carry = sum / 10;
    21             l3->next = new ListNode(sum % 10);
    22             l3 = l3->next;
    23             if(l1) l1 = l1->next;
    24             if(l2) l2 = l2->next;
    25         }
    26         return dummy->next;
    27     }
    28 };
  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12153295.html
Copyright © 2020-2023  润新知