题目描述:
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/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。
喜碧第 发布于 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的值,这又是为什么,希望得到回复,很困扰我。
在线疯狂 发布于 2016年5月27日 17:43 #
head是一个哑节点(dummy node),可以简化代码。
python的对象分为两种:可变对象与不可变对象。
整数属于不可变对象,当改变j的值时,相当于新建了一个整数对象重新赋值给j,故不会改变i的值。
而l和head指向的是可变对象,因而l变化了,head也会随之变化。
CYan 发布于 2021年12月17日 12:16 #
你好,请问 sum, carry = carry, 0 的用处是什么?初学者,不太懂,期待回复,谢谢