力扣第二题 大数相加 ,链表在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

 

posted @ 2021-07-26 16:12  yi术家  阅读(170)  评论(0)    收藏  举报