zoukankan      html  css  js  c++  java
  • lintcode-【简单题】链表求和

    题目:

    你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

    样例:

    给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

    答案:

    从头到尾按链表顺序遍历相加就行啦,如果加到最后,进位不为0,还需要另外添加一个节点。

    代码:

     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     /**
    12      * @param l1: the first list
    13      * @param l2: the second list
    14      * @return: the sum list of l1 and l2 
    15      */
    16     ListNode *addLists(ListNode *l1, ListNode *l2) {
    17         // write your code here
    18         int carry = 0,value = 0;
    19         ListNode *l1Iter = l1;
    20         ListNode *l2Iter = l2;
    21         ListNode *ansRoot = NULL,*ansIter = NULL;
    22         
    23         while(l1Iter != NULL && l2Iter != NULL)
    24         {
    25             value = l1Iter->val + l2Iter->val + carry;
    26             carry = value / 10;
    27             value = value % 10;
    28             
    29             ListNode *node = new ListNode(value);
    30             if(ansRoot == NULL)
    31             {
    32                 ansRoot = node;
    33             }
    34             
    35             if(ansIter != NULL)
    36             {
    37                 ansIter->next = node;
    38             }
    39             
    40             ansIter = node;
    41             l1Iter = l1Iter->next;
    42             l2Iter = l2Iter->next;
    43         }
    44         
    45         while(l1Iter != NULL)
    46         {
    47             value = l1Iter->val + carry;
    48             carry = value / 10;
    49             value = value % 10;
    50             
    51             ListNode *node = new ListNode(value);
    52             if(ansRoot == NULL)
    53             {
    54                 ansRoot = node;
    55             }
    56             
    57             if(ansIter != NULL)
    58             {
    59                 ansIter->next = node;
    60             }
    61             
    62             ansIter = node;
    63             l1Iter = l1Iter->next;
    64         }
    65         
    66         while(l2Iter != NULL)
    67         {
    68             value = l2Iter->val + carry;
    69             carry = value / 10;
    70             value = value % 10;
    71             
    72             ListNode *node = new ListNode(value);
    73             if(ansRoot == NULL)
    74             {
    75                 ansRoot = node;
    76             }
    77             
    78             if(ansIter != NULL)
    79             {
    80                 ansIter->next = node;
    81             }
    82             
    83             ansIter = node;
    84             l2Iter = l2Iter->next;
    85         }
    86         
    87         if(carry != 0)
    88         {
    89             ListNode *node = new ListNode(carry);
    90             if(ansIter != NULL)
    91             {
    92                 ansIter->next = node;
    93             }
    94         }
    95         return ansRoot;
    96     }
    97 };
    View Code
  • 相关阅读:
    你人生中的那口井挖了没有?
    SQL Server 中WITH (NOLOCK)浅析
    如何用SQL语句查询Excel数据?
    ASP.NET Core中的依赖注入(2):依赖注入(DI)
    ASP.NET Core中的依赖注入(1):控制反转(IoC)
    wx小程序的学习
    Mac OS 下安装mysql环境
    Mac 全局变量 ~/.bash_profile 文件不存在的问题
    延期风险原因总结
    homebrew osx下面最优秀的包管理工具
  • 原文地址:https://www.cnblogs.com/Shirlies/p/5219343.html
Copyright © 2011-2022 走看看