使用__str __()在python中打印节点的链接列表

时间:2015-01-12 06:26:39

标签: python linked-list

我在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]等等。如果随机指针与next一起,则它将是[1] - > [2] - > [3,4] - > [4]例如。这里2接下来是3和2 rand是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))

这很漂亮,没有随机指针。但是我无法在其中加入随机指针打印。我尝试了几种方法,但它搞砸了方括号。我该怎么做呢?

由于

2 个答案:

答案 0 :(得分:0)

尝试将指针的打印分解出来,这样可能更清楚:

#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 + ']'

答案 1 :(得分:0)

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

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)