zoukankan      html  css  js  c++  java
  • 【LeetCode刷题系列

    题目:

    You are given two non-empty linked lists representing two non-negative integers. 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.

    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

    Example:

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8
    Explanation: 342 + 465 = 807.

    代码(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         // 结果链表的首节点
    13         ListNode *head = nullptr; 
    14         // 尾插法建立单链表指向尾节点
    15         ListNode *tail = nullptr; 
    16         // num1为两整数相加后的个位数值
    17         int num1 = 0;
    18         // num2为两整数相加后的进位数值
    19         int num2 = 0;
    20         // node1Val为l1当前节点的数据域或者0
    21         int node1Val = 0;
    22         // node2Val为l2当前节点的数据域或者0
    23         int node2Val = 0;
    24         // count变量的设置是为了尾插法建立单链表设置的计数器
    25         int count = 0;
    26         
    27         while(l1 != nullptr || l2 != nullptr)
    28         {
    29             // 如果节点不为空,则取节点的数据域否则让节点的数据域为0
    30             if(l1 == nullptr)
    31             {
    32                 node1Val = 0;
    33             }else
    34             {
    35                 node1Val = l1->val;
    36             }
    37             if(l2 == nullptr)
    38             {
    39                 node2Val = 0;
    40             }else
    41             {
    42                  node2Val = l2->val;
    43             }
    44             // 本次计算结果 = 本次计算的node1Val + 本次计算的node1Va2 + 进位值
    45             num1 = node1Val + node2Val + num2;
    46             if(num1 >= 10)
    47             {
    48                 num1 = num1 - 10;
    49                 num2 = 1;
    50             }else
    51             {
    52                 num2 = 0;
    53             }
    54             // 为建立结果链表创建节点
    55             ListNode *newNode = new ListNode(num1);
    56             // 尾插法建立结果单链表,如果是首节点,需要进行特殊处理
    57             if(count == 0)
    58             {
    59                 head = tail = newNode;
    60             }else
    61             {
    62                 tail->next = newNode;
    63                 tail = newNode;
    64             }
    65             // 链表向前移动并释放原始链表所占的内存空间
    66             if(l1 != nullptr)
    67             {
    68                 ListNode *tempNode1 = l1;
    69                 l1 = l1->next;
    70                 delete tempNode1;
    71             }  
    72             if(l2 != nullptr)
    73             {
    74                 ListNode *tempNode2 = l2;
    75                 l2 = l2->next;
    76                 delete tempNode2;
    77             }
    78             
    79             /* 为了解决例如情况:l1 = [5]  
    80                               l2 = [5] 
    81                这种情况
    82             */
    83             if(l1 == nullptr && l2 == nullptr && num2 != 0)
    84             {
    85                 ListNode *newNode = new ListNode(num2);
    86                 tail->next = newNode;
    87                 tail = newNode;
    88                 return head;
    89             }
    90             count++;
    91             
    92         }
    93     
    94         return head;
    95     }
    96 };
  • 相关阅读:
    NanoProfiler
    NanoProfiler
    Open Source Cassandra Gitbook for Developer
    Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
    Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
    Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
    Android Fragment使用(一) 基础篇 温故知新
    Set up Github Pages with Hexo, migrating from Jekyll
    EventBus源码解析 源码阅读记录
    Android M Permission 运行时权限 学习笔记
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/10770215.html
Copyright © 2011-2022 走看看