DoubleLinkedList Получает расположение в памяти, а не значение узла - Python - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать Doubly LinkedList, но вместо значения узла я получаю место в памяти.Оцените помощь

#!/usr/bin/python3

class Node:
  def __init__(self, num):
    self.next = None
    self.prev = None
    self.num = num

class DlinkedList:
   def __init__(self):
     self.start = None
     self.end = None
     self.size = 0 

   def addFirst(self, num):
     n = Node(num)

     if( self.start == None):
       self.start = n
       self.end = n
       print (self.start)
       print (self.end)
       print (self.size)
     else:
       n.next = self.start

d = DlinkedList()
print ("Add node 2")
d.addFirst(2)
print ("Add Node 1")
d.addFirst(1)

, вывод выводится примерно следующим образом, что означает, что я здесь что-то не так делаю.

Я понимаю, что код еще не завершен, но я пытаюсь немного начатьпостепенно

Вывод кода:

Add node 2
<__main__.Node object at 0x7f0c61219940>
<__main__.Node object at 0x7f0c61219940>
0
Add Node 1

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вы печатаете self.start и self.end, которые имеют тип Node, и, поскольку Node не имеет переопределения __str__, он просто печатает ячейку памяти.Вы хотите напечатать self.start.num и self.end.num или добавить определение для __str__:

def __str__(self):
    return self.num
0 голосов
/ 20 ноября 2018

Похоже, вам не хватает некоторых ключевых шагов здесь.Вам нужно убедиться, что вы увеличиваете свой счетчик, а также связываете новый узел с передней частью вашего двусвязного списка.Вот что я закончил:

#!/usr/bin/python3

class Node:
  def __init__(self, num):
    self.next = None
    self.prev = None
    self.num = num

class DlinkedList:
   def __init__(self):
     self.start = None
     self.end = None
     self.size = 0 

   def addFirst(self, num):
     n = Node(num)

     if(self.start == None):
       self.start = n
       self.end = n

       print (self.start.num)
       print (self.end.num)
       print (self.size)
     else:
       n.next = self.start
       self.start.prev = n
       self.start = n
     self.size += 1

d = DlinkedList()
print ("Add node 2")
d.addFirst(2)
print ("Add Node 1")
d.addFirst(1)

print(d.start.num, d.start.next.num, d.end.prev.num, d.end.num)

Пример вывода из iPython

Add node 2
2
2
0
Add Node 1
1 2 1 2
In [3]: d.addFirst(3)

In [4]: print(d.start.num, d.start.next.num, d.end.prev.num, d.end.num)
3 1 1 2
...