使用 __str__() 在 python 中打印节点的链表



我在python中有一个节点类,它是这样的

class Node:
  def __init__(self, value, next, prev, rand):
    self.value = value
    self.next = next
    self.prev = prev
    self.rand = rand

我通过创建节点并设置适当的指针来创建列表。现在,我想漂亮地打印这个列表:比如 [1] --> [2] --> [3] 等等。例如,如果有一个随机指针和下一个指针,它将是 [1] --> [2] --> [3,4] -->[4]。这里 2 下一个是 3,2 兰德是 4,而 3 下一个是 4。我正在尝试使用它自己的节点类中的内置 str() 方法来执行此操作。截至目前,我有如下

#pretty print a node
def __str__(self):
  if self.next is None:
    return '[%d]' % (self.value)
  else:
    return '[%d]-->%s' % (self.value, str(self.next))

这漂亮的打印它没有随机指针。但是我无法将随机指针打印合并到其中。我尝试了几种方法,但它弄乱了括号。我会怎么做?

谢谢

尝试分解指针的打印,这样可能会更清晰:

#pretty print a node
def __str__(self):
  if self.next is None:
    return self.stringify_pointers()
  else:
    return '%s-->%s' % (self.stringify_pointers(), str(self.next))
def stringify_pointers(self):
    s = '['
    if self.next:
        s += str(self.next) + (',' if self.rand else '')
    if self.rand:
        # <> to distinguish rand from next
        s += '<%s>' % str(self.rand)
    return s + ']'

一种方法是在字符串上使用数组切片并将随机值注入到下一个节点字符串中,如下所示

def __str__(self):
        if self.next is None:
            return '[%d]' % (self.value)
        else:
            nn = str(self.next)
            if self.rand != None:
                nn = '%s,%d%s' % (nn[:2], self.rand, nn[2:])                             
            return '[%d]-->%s' % (self.value, nn)

相关内容

  • 没有找到相关文章

最新更新