zoukankan      html  css  js  c++  java
  • 31.leetcode2_add_two_numbers

    1.题目描述


    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.
    

    2.题目分析

    如果是列表的话,直接转为数字相加再返回列表就可以了。如果是链表的话,这样做就会麻烦很多了。所以还是依次遍历节点求和比较方便

    3.解题思路

     1 # Definition for singly-linked list.
     2 # class ListNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution(object):
     8     def addTwoNumbers(self, l1, l2):
     9         """
    10         :type l1: ListNode
    11         :type l2: ListNode
    12         :rtype: ListNode
    13         """
    14         head,p1,p2=ListNode(0),l1,l2 #构建一个新链表
    15         tail=head #tail指向新链表尾部
    16         carry=0    #代表进位
    17         while p1!=None and p2!=None: #遍历两个链表公共部分
    18             num=p1.val+p2.val+carry     #求和
    19             if num>9:                            #判断是否需要进位
    20                 num-=10
    21                 carry=1
    22             else:
    23                 carry=0
    24             tail.next=ListNode(num)        #向新链表中添加元素
    25             tail=tail.next                         #尾指针移动
    26             p1=p1.next                           #双指针同时移动
    27             p2=p2.next
    28         while p1!=None:  #判断哪一个链表还没有遍历结束
    29             num=carry+p1.val 
    30             if num>9:
    31                 num-=10
    32                 carry=1
    33             else:
    34                 carry=0
    35             tail.next=ListNode(num) #新链表中添加新元素
    36             tail=tail.next
    37             p1=p1.next
    38         while p2!=None:
    39             num=carry+p2.val
    40             if num>9:
    41                 num-=10
    42                 carry=1
    43             else:
    44                 carry=0
    45             tail.next=ListNode(num)
    46             tail=tail.next
    47             p2=p2.next
    48         if carry==1: #如果最后还有进位1的话,添加在链表尾部
    49             tail.next=ListNode(carry)
    50         head=head.next #删除链表的首节点
    51         return head        #返回链表
  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8460040.html
Copyright © 2011-2022 走看看