【问题标题】:Creating a linked list with digits of a given number创建具有给定数字的数字的链表
【发布时间】:2022-01-24 13:56:18
【问题描述】:

我目前正在自学一些编程,我偶然发现了一个问题,要求您制作一个包含某个数字的数字的链表(从最后一个到第一个)。这是我编写的代码,我不知道为什么它不起作用。我创建了简单的节点类和一个 Number 类来保存我的列表。

class Node:
    def __init__(self, x=None):
        self.val = x
        self.next = None

    def __str__(self):
        return str(self.val)


class Number:
    def __init__(self):
        self.first = None

    def set(self, num):
        for i in range(len(str(num))):
            tail = Node(num % 10)
            if i == 0:
                head = tail
            num //= 10
            tail = tail.next
        self.first = head

Set 函数是用来创建一个给定数字的列表,所以

n = Number()
n.set(123)

应该创建一个列表 3 -> 2 -> 1,但是当我尝试使用打印它时

def node_printer(head: Node):
    while head is not None:
        if head.next is not None:
            print(str(head) + ", ", end="")
        else:
            print(head)
        head = head.next

并调用 node_printer(n.first) 我得到 3 作为输出。

【问题讨论】:

  • tail = tail.next 因为tail 刚刚创建,所以tail.nextNone
  • 那么下一次迭代不会将None设置为下一个节点?
  • 没有链接。 tail.next 始终是 None

标签: python list oop linked-list


【解决方案1】:

您可以通过添加头部而不是尾部来解决此问题。以这种方式获取数字的数字也容易得多:

def numberList(number):
    head = none                            # initial head
    while number:  
       number,digit = divmod(number,10)    # extract last digit
       newHead = Node(digit)               # make it a node
       newHead.next, head = head, newHead  # link it as newHead
    return head or Node(0)                 # first digit or single zero

您可以通过在 Node 类中添加一个 nextNode 可选参数来缩短它:

class Node:
    def __init__(self, x=None, nextNode=None):
        self.val  = x
        self.next = nextNode

def numberList(number):
    head = None                            # initial head 
    while number:  
       number,digit = divmod(number,10)    # extract last digit
       head = Node(digit,head)             # make it a node, link old head
    return head or Node(0)                 # first digit or single zero

【讨论】:

  • 谢谢!很有帮助
【解决方案2】:

tail = tail.next,因为刚刚创建了tailtail.nextNone,所以没有任何链接。

def set(self, num):
    head = tail = None
    while num:
        # Create new node
        temp = Node(num % 10)
        # Empty list?
        if head == None:
            head = tail = temp
        # Not empty list, append to tail
        else:
            tail.next = temp
        # Update tail for next time
        tail = temp
        num //= 10
    self.first = head

【讨论】:

  • 您的解决方案非常清楚。谢谢!
猜你喜欢
  • 2017-03-20
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多