【问题标题】:Linked List and array链表和数组
【发布时间】:2022-01-10 11:35:55
【问题描述】:

我知道 StackOverflow 不会写问题并获取答案站点,但这是我的 leetcode 问题。

l1 = input()
l2 = input()
def f(x): #Gives reversed of linkedlist ex. [2, 4, 3] return 342
    a, u = 0, 0
    for ele in x:
        if ele.isnumeric():
            a += int(ele)*(10**u)
            u += 1
    return a
l = list(int(i) for i in str(f(l1) + f(l2)))
print(list(reversed(l)))

这个问题是leet code problem 所以在这里我已经解决了这个问题,但这是不同的,他们不希望逗号后的数字之间有空格。

  • 输入:[2,4,3] [5,6,4]

  • 我的输出: [7, 0, 8]

  • 预期输出:[7,0,8]

不过,我也试过

k = str(f(l1) + f(l2))
print("[" + ",".join(str(k)[::-1]) + "]")

【问题讨论】:

    标签: python list arraylist linked-list


    【解决方案1】:

    这只是列表的默认表示,每个逗号后面都有一个空格

    x = [1, 2, 3]
    print(x)                        # [1, 2, 3]  type is list
    print(str(x).replace(" ", ""))  # [1,2,3]    type is str
    

    【讨论】:

    • +1 谢谢!这可以删除空格,但我仍然无法通过代码。你能提供学习python的链接/线程吗
    【解决方案2】:

    你不应该在 leetcode 上使用 input() 和 print()

    当你开始一个问题时,他们会给你一个函数,你必须填写并返回结果。

    class Solution:
        def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
            #put your code here
            return the_result
    

    这个问题应该是使用链表,节点定义为

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    

    这应该是您应该编码的 addTwoNumbers() 方法的输入。

    但不知何故,通过使用input(),你绕过了这个并获取了原始列表。

    另外,prints(stdout) 不是 leetcode 系统正在评估的,它们寻找 addTwoNumbers() 的输出,在这种情况下是空白的。

    【讨论】:

    • $\to +1 $ 接受您能否提供任何链接/线程以了解有关linkedList 的更多信息或学习python
    • realpython.com/linked-lists-python/#main-concepts,老实说,它主要是用于算法挑战目的的抽象事物,您只需在 python 中的任何实际应用程序中使用常规列表 [] 对象
    【解决方案3】:

    这里是完整的解决方案;

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    
    class Solution:
        def __init__(self):
            self.head = None
    
        def rev(self, ls):
            res = []
    
            self.head = ls
            while self.head:
                res.append(str(self.head.val))
                self.head = self.head.next
    
            return list(reversed(res))
        
        def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
            res1 = int(''.join(self.rev(l1)))
            res2 = int(''.join(self.rev(l2)))
            
            res3 = str(res1 + res2)
            resls = list(reversed([i for i in res3]))
            
            self.head = ListNode(resls[0], None)
            finalres = self.head
            for i in range(1, len(resls)):
                lsn = ListNode(resls[i], None)
                finalres.next = lsn
                finalres = finalres.next
                
            return self.head 
            
    **Explanation**:
    

    我假设您了解链表的基础知识,即它们是什么(如果您有任何困惑,请发表评论)。

    所以在解决方案类中,我只是在其__init__ 方法中定义了一个self.head 属性,我将使用它来跟踪链表中的元素。它最初设置为无,因为那里没有任何数据。

    然后我定义了一个 rev 方法来反转给定的链表。

    在 rev 中,我创建了一个空列表 res 来存储提供的链表中的数据。

    Rev 也将链表作为参数,因为我将从链表中获取数据并将其附加到 res 列表中

    所以我把 self.head 与我们调用方法时提供的链表 ls 相等。

    然后我只是运行了一个 while 循环,直到 self.head 被定义(即,直到它不是 None 这意味着仍有数据)。

    每次迭代后,我不断将 self.head 更改为 self.head.next 以在链表中向前移动并从该链表的每个节点中获取数据并将其附加到 res 列表。

    最后我只是返回了反向的 res。

    然后我定义了另一个方法,addTwoNumbers,它接受两个链表并根据要求返回总和。

    首先,我需要这两个链表为整数形式并反转(根据条件)。所以我使用 rev 方法来反转它们,join 方法(python 中的内置方法来加入字符串列表)将列表转换为字符串,然后使用 int 方法将字符串转换为 int。

    我对两个链表都做了同样的事情,并将它们分别存储在 res1 和 res2 中。

    然后我将它们的总和 (res3) 转换为字符串,因为我们无法迭代整数。

    然后我将 res3 转换为反向列表。

    现在是最后一步,将整个内容作为列表节点返回。

    所以我只是创建了一个 ListNode 的实例;

    self.head = ListNode(resls[0], None)

    这将创建一个 ListNode 实例,其中 data 作为 resls 的第一个元素,next 作为 none。

    然后我将它存储在另一个变量中以引用同一个实例并且不要更改它。

    然后在剩余元素上运行一个远循环并不断添加数据和下一步。

    希望你能理解。谢谢。

    【讨论】:

    • 这行得通!我赞成你的回答,虽然要求你提供解释/thread_links
    • @I_don't_know_maths_ 更新了我的答案。如果您需要更多解释,请发表评论
    • 非常感谢!这足以让我接受你的回答哈哈!
    • 谢谢!学习愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2012-11-11
    • 2014-02-20
    相关资源
    最近更新 更多