[LeetCode]Add Two Numbers

题目描述:

You are given two linked lists representing two non-negative numbers. 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.

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

题目大意:

给定两个链表分别代表两个非负整数。数位以倒序存储,并且每一个节点包含一位数字。将两个数字相加并以链表形式返回。

解题思路:

题目难度较低,主要考察链表操作和加法进位的基础知识。

Python代码:

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

class Solution:
    # @return a ListNode
    def addTwoNumbers(self, l1, l2):
        head = ListNode(0)
        l = head
        carry = 0
        while l1 or l2 or carry:
            sum, carry = carry, 0
            if l1:
                sum += l1.val
                l1 = l1.next
            if l2:
                sum += l2.val
                l2 = l2.next
            if sum > 9:
                carry = 1
                sum -= 10
            l.next = ListNode(sum)
            l = l.next
        return head.next

 

本文链接:http://bookshadow.com/weblog/2015/04/05/leetcode-add-two-numbers/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

评论
  1. 喜碧第 喜碧第 发布于 2016年5月27日 08:39 #

    http://bookshadow.com/weblog/2015/04/05/leetcode-add-two-numbers/
    你好请问这个题目,为什么又定义了一个l,l变化了为什么head也跟着变了?
    如果 i=5. j=i.改变j的值并不影响i的值,这又是为什么,希望得到回复,很困扰我。

  2. 在线疯狂 在线疯狂 发布于 2016年5月27日 17:43 #

    head是一个哑节点(dummy node),可以简化代码。
    python的对象分为两种:可变对象与不可变对象。
    整数属于不可变对象,当改变j的值时,相当于新建了一个整数对象重新赋值给j,故不会改变i的值。
    而l和head指向的是可变对象,因而l变化了,head也会随之变化。

  3. CYan CYan 发布于 2021年12月17日 12:16 #

    你好,请问 sum, carry = carry, 0 的用处是什么?初学者,不太懂,期待回复,谢谢

张贴您的评论