zoukankan      html  css  js  c++  java
  • Add Two Numbers

    Description:

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    Definition for singly-linked list:

    struct ListNode {
          int val;
          ListNode *next;
          ListNode(int x) : val(x), next(NULL) {}
     };

    Code:

     1  ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
     2         size_t lengthL1 = 0;
     3         size_t lengthL2 = 0;
     4         ListNode *result = NULL;
     5         ListNode *pL1 = l1;
     6         ListNode *pL2 = l2;
     7         while (pL1)
     8         {
     9             lengthL1++;
    10             pL1 = pL1->next;
    11         }
    12         while (pL2)
    13         {
    14             lengthL2++;
    15             pL2 = pL2->next;
    16         }
    17         
    18         ListNode *longList = (lengthL1 >= lengthL2)?l1:l2;
    19         ListNode *shortList = (lengthL1 < lengthL2)?l1:l2;
    20         
    21         //设置进位标志
    22         int flag = 0;
    23         int x;
    24         ListNode *p = NULL;
    25         while (shortList)
    26         {
    27             x = flag + longList->val + shortList->val;
    28             flag = x/10;
    29             if (result==NULL)
    30             {
    31                 result = new ListNode ( x%10 );
    32                 p = result;
    33             }
    34             else
    35             {
    36                 p->next = new ListNode (x%10);
    37                 p = p->next;
    38             }
    39             shortList = shortList->next;
    40             longList = longList->next;
    41         }
    42          while (longList)
    43         {
    44             if (flag == 0)
    45             {
    46                    p->next = longList; 
    47                    return result;
    48             }
    49             else
    50             {
    51                 x = flag + longList->val;
    52                 flag = x/10;
    53                 p->next = new ListNode (x%10);
    54                 p = p->next;
    55                 longList = longList->next;
    56              }
    57         }
    58             if (flag==1)
    59             {
    60                 p->next = new ListNode (1);
    61             }
    62             return result;
    63     }
  • 相关阅读:
    json转List、Map
    java复制文件的4种方式
    Java并发编程之CountDownLatch的用法
    SpringMVC整合ActiveMQ
    Spring AOP (事务管理)
    Spring AOP 的实现方式(以日志管理为例)
    Java设计模式之模板方法模式(Template Method)
    MongoDB简介
    线程池的实现原理
    ReentrantLock的底层实现机制 AQS
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4574945.html
Copyright © 2011-2022 走看看