zoukankan      html  css  js  c++  java
  • 2 两数相加

    2 两数相加——Medium

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

    • 方法1:将长度较短的链表在末尾补零使得两个连表长度相等,再一个一个元素对其相加(考虑进位)

      • 思路
        • 获取两个链表所对应的长度
        • 在较短的链表末尾补零
        • 对齐相加考虑进位
      • code
      class Solution {
      public:
          ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
              int len1 = 1;//记录l1的长度
              int len2 = 1;//记录l2的长度
              ListNode* cur1 = l1;
              ListNode* cur2 = l2;
              while (cur1->next != NULL)//获取l1的长度
              {
                  len1++;
                  cur1 = cur1->next;
              }
              while (cur2->next != NULL)//获取l2的长度
              {
                  len2++;
                  cur2 = cur2->next;
              }
              if (len1 > len2)//l1较长,在l2末尾补零
              {
                  for (int i = 1; i <= len1 - len2; i++)
                  {
                      cur2->next = new ListNode(0);
                      cur2 = cur2->next;
                  }
              }
              else//l2较长,在l1末尾补零
              {
                  for (int i = 1; i <= len2 - len1; i++)
                  {
                      cur1->next = new ListNode(0);
                      cur1 = cur1->next;
                  }
              }
              cur1 = l1;
              cur2 = l2;
              bool carry = false;//记录进位
              ListNode* l3 = new ListNode(-1);//存放结果的链表
              ListNode* cur = l3;//l3的移动指针
              int i = 0;//记录相加结果
              while (cur1 != NULL && cur2 != NULL)
              {
                  i = carry + cur1->val + cur2->val;
                  cur->next = new ListNode(i % 10);
                  carry = i >= 10 ? true : false;
                  cur = cur->next;
                  cur1 = cur1->next;
                  cur2 = cur2->next;
              }
              if (carry)//若最后还有进位
              {
                  cur->next = new ListNode(1);
                  cur = cur->next;
              }
              return l3->next;
          }
      };
      
    • 方法2:不对齐补零,若链表不为空则用sum(代表每个位的和的结果)加上,考虑进位

      • 思路
      • code
      class Solution {
      public:
          ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
              ListNode* head = new ListNode(-1);//存放结果的链表
              ListNode* cur = head;//移动指针
              int sum = 0;//每个位的加和结果
              bool carry = false;//进位标志
              while (l1 != nullptr || l2 != nullptr){
                  sum = 0;
                  if (l1 != nullptr) {
                      sum += l1->val;
                      l1 = l1->next;
                  }
                  if (l2 != nullptr) {
                      sum += l2->val;
                      l2 = l2->next;
                  }
                  if (carry) {
                      sum++;
                  }
                  cur->next = new ListNode(sum % 10);
                  cur = cur->next;
                  carry = sum >= 10 ? true : false;
              }
              if (carry) {
                  cur->next = new ListNode(1);
              }
              return head->next;
          }
      };
      
  • 相关阅读:
    2017年5月15号课堂笔记
    2017年5月12号课堂笔记
    2017年5月8号课堂笔记
    2017年5月5号课堂笔记
    2017年4月26号课堂笔记
    不忘初心,坚持走下去
    2017年4月24号课堂笔记
    2017年4月21号课堂笔记
    2017年4月19号课堂笔记
    autoit UIA获取Listview的信息
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13136760.html
Copyright © 2011-2022 走看看