链表两数加python
一、问题描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
from typing import Optional
# Definition for singly-linked list.
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:cur = dummy = ListNode() # 哨兵节点carry = 0 # 进位while l1 or l2 or carry: # 有一个不是空节点,或者还有进位,就继续迭代if l1:carry += l1.val # 节点值和进位加在一起l1 = l1.next # 下一个节点if l2:carry += l2.val # 节点值和进位加在一起l2 = l2.next # 下一个节点cur.next = ListNode(carry % 10) # 每个节点保存一个数位carry //= 10 # 新的进位cur = cur.next # 下一个节点#return dummy.next # 哨兵节点的下一个节点就是头节点return dummy.next
def creat_tail(li):head = ListNode(li[0])tail = headfor element in li[1:]:node = ListNode(element)tail.next = nodetail = nodereturn headdef print_link(lk):while lk:print(lk.item, end=',')lk = lk.nextl1 = creat_tail([2,4,3])
l2 = creat_tail([5,6,4])
S = Solution()
def printList(l):while l:print(l.val, end = ',')l = l.nextprintList(S.addTwoNumbers(l1,l2))
二、结果展示
7,0,8,