LeetCode (02) Add Two Numbers by Python

继续用博客记录学习LeetCode的过程啦!
题目如下:

image.png

题目的大意是输入为两个非空的链表,每个链表的数字已相反的顺序存储,添加这两个数字并返回新的链表。
如链表1:(2 -> 4 -> 5 -> 7 -> 9)链表2:(1 -> 2 -> 3)
链表1代表数字:97542
链表2代表数字:321
相加得到:97863
返回链表则为(3 -> 6 -> 8 -> 7 -> 9)


分析题目:
题目主要考察的是链表的应用,需要注意的是进位,以及两个链表不等长的情况。题目中提到的倒序其实有点迷惑,所谓的倒序既低位放在了前面,高位放在了后面。而我们做加法其实就是由低位加到高位(既先计算个位,在计算十位。。。)
那么如果链表等长,我们只需要对应位置相加,结点之和大于10的情况我们进1,即可。
如果链表不等长,我们先将链表等长的地方相加,余下位置放入长链表中未相加的结点即可,同样需要进位。
那么按照上述思路,我们需要一个进位标志flag。一个新的链表放入结果,resultNode。

代码如下:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 == None:
            return l2
        if l2 == None:
            return l1
        resultNode = ListNode(0)
        p = resultNode
        flag = 0
        while l1 and l2:
            sum = l1.val + l2.val + flag
            flag = 0
            if sum >9:
                sum -= 10
                flag = 1
            p.next = ListNode(sum)
            l1 = l1.next
            l2 = l2.next
            p = p.next
        if l1:
            while l1:
                sum = l1.val + flag
                flag = 0
                if sum >9:
                    sum -= 10
                    flag = 1
                p.next = ListNode(sum)
                l1 = l1.next
                p = p.next
        if l2:
            while l2:
                sum = l2.val + flag
                flag = 0
                if sum >9:
                    sum -= 10
                    flag = 1
                p.next = ListNode(sum)
                l2 = l2.next
                p = p.next
        if flag:
            p.next = ListNode(flag)
            p = p.next
        return resultNode.next

代码中需要注意的是,如果链表等长时,进位标志flag = 1时,仍需把flag放入结点。
主要时考察对链表的使用。题目不是很难。
以上,祝好!

你可能感兴趣的:(LeetCode (02) Add Two Numbers by Python)