刷题的日常[Leetcode]——2)Add Two Numbers

本文介绍了一种利用Python实现两个链表数值相加的方法。通过定义链表节点类及解决方案类,实现了逐位相加并处理进位的逻辑,最终返回新的链表结果。

题目描述:

2->5->1

3->6->1

相加得到5->1->3

要注意的问题:

 返回的值是要包含第一个val=0的节点的

解决:直接从l1和l2的构造时第一个val=0的节点开始做加法

 要注意l1和l2长度不一致的情况

解决:取l1和l2节点值的时候要判断是否为空

 要注意最后一个节点数值>9的情况

解决:循环要加上商值的判断,如果商值不为0,应继续循环;要给取l1和l2的变量赋初值

# 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):
    	root=result=ListNode(0)
    	shang=0

    	while l1 or l2 or shang:
    		a=0
    		b=0
    		if l1:
	    		a=l1.val
	    		l1=l1.next
	    	if l2:
	    		b=l2.val
	    		l2=l2.next
    		shang,yushu=divmod(a+b+shang,10)

    		result.next=ListNode(yushu)
    		result=result.next
    	return root.next

    	
if __name__=="__main__":
	l1=ListNode(0)
	l2=ListNode(0)
	a=[5]
	b=[5]
	t=l1
	for item in a:
		p=ListNode(item)
		t.next=p
		t=p
	t=l2
	for item in b:
		p=ListNode(item)
		t.next=p
		t=p
	s=Solution()
	r=s.addTwoNumbers(l1,l2)
	while r:
		print r.val
		r=r.next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值