• 【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 };
  • 相关阅读:
    nginx构建https
    安装mysql的遇到的问题
    docker mysql 2059
    centos7 安装chrome
    谷歌浏览器启动参数
    php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, php webdriver 教程, A php client for webdriver.
    nginx转发
    nginx变量与实列
    mysql 语句
    frp 内网穿透配置
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/10770215.html
Copyright © 2020-2023  润新知