zoukankan      html  css  js  c++  java
  • *445. Add Two Numbers II

    1. 原始题目

    You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first 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.

    Follow up:
    What if you cannot modify the input lists? In other words, reversing the lists is not allowed.

    Example:

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

    2. 题目理解

    给定两个整数,求和。注意链表每个结点只放一个数字。高位在前。

    3. 解题

    思路:两个链表分别进栈,然后出栈时相加,注意设置一个临时变量用来存放进位。每次相加时应该是3个值相加:链表a+链表b+进位。

    此外注意的是若最高为还有进位,则继续添加新节点。

     1 # Definition for singly-linked list.
     2 # class ListNode:
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution:
     8     def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
     9         stack1 = []
    10         stack2 = []
    11 
    12         newhead = ListNode(0)
    13         while(l1):
    14             stack1.append(l1.val)
    15             l1 = l1.next
    16         while(l2):
    17             stack2.append(l2.val)
    18             l2 = l2.next
    19         p = 0            # 进位
    20         while stack1 or stack2 or p:            # 注意这里别丢了 or p命令。如果有进位则还需创建新节点
    21             temp = (stack1.pop() if stack1 else 0) + 
    22                    (stack2.pop() if stack2 else 0) + p         # 每次的和为两个链表的和+进位
    23             p = temp//10                                       # 更新进位
    24             
    25             node = ListNode(temp%10)
    26             node.next = newhead.next
    27             newhead.next = node
    28             
    29         return newhead.next

    验证:

     1 # 新建链表1
     2 listnode1 = ListNode_handle(None)
     3 s1 = [1,2,3,4,5,6,7,8]
     4 for i in s1:
     5     listnode1.add(i)
     6 listnode1.print_node(listnode1.head)
     7 
     8 # 新建链表2
     9 listnode2 = ListNode_handle(None)
    10 s2 = [1,5,9,9,9]
    11 for i in s2:
    12     listnode2.add(i)
    13 listnode2.print_node(listnode2.head)
    14 
    15 s = Solution()
    16 head = s.addTwoNumbers(listnode1.head, listnode2.head)
    17 listnode1.print_node(head)

    1 2 3 4 5 6 7 8
    1 5 9 9 9
    1 2 3 6 1 6 7 7

  • 相关阅读:
    Spring Cloud Eureka的学习
    Maven环境配置
    Maven解决静态资源过滤问题
    Linux Desktop Entry文件配置解析
    iptables规则持久化
    Markdown学习总结
    输vim /etc/rc.d/init.d/mysqld 报错 …..localdomain.pid
    UE4 集成讯飞听写插件
    单机梦幻西游
    使用A*寻路小记
  • 原文地址:https://www.cnblogs.com/king-lps/p/10664503.html
Copyright © 2011-2022 走看看