力扣第二题 大数相加 ,链表在python到底该怎么写?

但问题在于链表的表示 如何创建一个L3呢 如何用next将他们连接起来呢?
原来是采用 制作链表的形式
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark)
这里用L3指向第三个链表 更改指针的下一个节点。
声明变量和指针,以及进位mark。
l1_pointer = l1 l2_pointer = l2 l3 = ListNode(0) l3_pointer = l3
mark = 0
对于相同长度的部分操作如下:
mark = 0 while l1_pointer != None and l2_pointer != None : if l1_pointer.val + l2_pointer.val + mark >= 10: l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark - 10) mark = 1 else : l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark) mark = 0 l1_pointer = l1_pointer.next l2_pointer = l2_pointer.next l3_pointer = l3_pointer.next
不同长度如下:
while l1_pointer != None : if l1_pointer.val+mark < 10: l3_pointer.next = ListNode(l1_pointer.val+mark) mark = 0 else: l3_pointer.next = ListNode(l1_pointer.val+mark-10) mark = 1 l1_pointer = l1_pointer.next l3_pointer = l3_pointer.next
处理最后一位:
if mark == 1: l3_pointer.next = ListNode(mark) return l3.next
顺便写了一个把列表变为链表的程序方便测试:
def makeList(l1): LNode = ListNode(0) Lp = LNode for i,each in enumerate(l1): if i != len(l1)-1: Lp.val = each Lp.next = ListNode(0) Lp = Lp.next else: Lp.val = each return LNode
全部代码:
class ListNode(object): def __init__(self, val=0, next=None): self.val = val self.next = next def makeList(l1): LNode = ListNode(0) Lp = LNode for i,each in enumerate(l1): if i != len(l1)-1: Lp.val = each Lp.next = ListNode(0) Lp = Lp.next else: Lp.val = each return LNode def addTwoNumbers(l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ l1_pointer = l1 l2_pointer = l2 l3 = ListNode(0) l3_pointer = l3 mark = 0 while l1_pointer != None and l2_pointer != None : if l1_pointer.val + l2_pointer.val + mark >= 10: l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark - 10) mark = 1 else : l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark) mark = 0 l1_pointer = l1_pointer.next l2_pointer = l2_pointer.next l3_pointer = l3_pointer.next if l1_pointer == None: l1_pointer = l2_pointer while l1_pointer != None : if l1_pointer.val+mark < 10: l3_pointer.next = ListNode(l1_pointer.val+mark) mark = 0 else: l3_pointer.next = ListNode(l1_pointer.val+mark-10) mark = 1 l1_pointer = l1_pointer.next l3_pointer = l3_pointer.next if mark == 1: l3_pointer.next = ListNode(mark) return l3.next l1 = makeList([9,9,9,9,9]) l2 = makeList([9,9,9]) l3 = addTwoNumbers(l1,l2) l3_pointer = l3 while l3_pointer != None: print(l3_pointer.val) l3_pointer = l3_pointer.next

浙公网安备 33010602011771号