python练习——链表

链表练习——两数相加

链表

链表是最简单的数据结构之一,包括单向链表、双向链表、循环链表。

每条链表都由一系列节点(node)组成,节点包括两部分:数据元素的值(value)和指向下一个节点的指针(next)。
在这里插入图片描述

相比数组,链表可以更加灵活的存储数据,不需要知道要存储的数据有多少,这样可以充分利用计算机的内存空间。链表可以再任意位置插入或删除数据,但是不允许随意读取数据。

在python3中定义一个链表数据结构:

class Listnode:
	def __init__(self, data):
		self.value = data
		self.next = None

Leetcode两数相加

问题描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

示例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思考:这里会出现两个问题
(1)两个链表不一样长(包括一个链表是空链表的情况)
(2)最后会出现进位

解决方法

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
    	listnode_1 = l1
    	listnode_2 = l2
    	listnode_3 = ListNode(0)
    	listnode_3_copy = listnode_3
    	carry = 0

    	while(listnode_1 or listnode_2):
    		#解决第一个问题
    		#在循环过程中,如果两个链表中有一个为空,那就赋值为0
    		num_1 = listnode_1.val if listnode_1 else 0
    		num_2 = listnode_2.val if listnode_2 else 0

    		#当前节点相加的结果是两个链表节点的值和进位值进行加和
    		value = num_1 + num_2 + carry

    		#由于存在head节点,所以相加结果要将个位上的数字存在结果链表的下一个节点中
    		#并将相加结果的十位上的数字赋值给进位变量carry
    		listnode_3_copy.next = ListNode(value % 10)
    		carry = value // 10

    		#当前节点计算后,要将链表节点转到下一个节点上
    		#如果有一个链表为空,就赋值为0
    		if listnode_1 != None:
    			listnode_1 = listnode_1.next
    		if listnode_2 != None:
    			listnode_2 = listnode_2.next

    		#将结果链表的节点转到下一节点处
    		listnode_3_copy = listnode_3_copy.next

    	#解决第二个问题
    	#判断两个链表最后一个节点相加后是否存在进位的情况,如果有就将进位值赋给结果链表的下一个节点
    	if carry != 0:
    		listnode_3_copy.next = ListNode(carry)
    	
    	#返回结果链表
    	return listnode_3.next
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值