>source

push () 및 show () 두 가지 메서드 만 사용하여 순환 연결 목록을 작성하려고합니다. 그러나 show () 메서드는 데이터 대신 주소를 인쇄합니다.

class Node:
    def __init__(self, data):
        self.data = data 
        self.next = None
        self.prev = None
class Circular_list:
    def __init__(self):
        self.head = Node(None)
        self.tail = Node(None)
        self.head.next = self.tail
        self.head.prev = self.tail
        self.tail.next = self.head
        self.tail.prev = self.head
    def push(self, data):
        node = Node(data)
        if self.head.data is None:
            self.head = node
            self.tail = node
        else:
            self.tail.next = node
            node.next = self.head
            node.prev = self.tail
            self.tail = node
            self.head.prev = self.tail
            
    def show(self):
        i = self.head
        for temp in range(4):
            print(i.data, end=' ')
            i = i.next
            temp += 1
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
list = Circular_list()
list.push(n1)
list.push(n2)
list.push(n3)
list.show()

출력은 <__main__.Node object at 0x000002A78EDD3FD0> <__main__.Node object at 0x000002A78EDD3F70> <__main__.Node object at 0x000002A78EDD3E80> 하지만 인쇄해야합니다 1 2 3

추신 : 원래 무한 while 루프로 show () 메서드를 작성했으며 꼬리에서 머리로 이동하는 측면에서 잘 작동합니다. 그래서 나는 그것이 OK 순환 연결 목록이라고 생각합니다. 하지만 안타깝게도 노드의 데이터를 가져올 수 없습니다.

  • 답변 # 1

    당신의 push 방법은 다음과 같습니다.

    def push(self, data):
        node = Node(data)
    
    

    따라서 데이터 (목록 요소, int 이 예에서), 목록에 추가 할 노드를 만듭니다. 그러나이 메서드를 호출하면 Node 사물:

    n1 = Node(1)
    ...
    list.push(n1)
    
    

    그래서 push 방법, 당신은 설정 nodeNodedata = Node(1) . 따라서 인쇄 된 데이터는 Node , 정의가 없기 때문에 str 표현, 당신은 당신이 보는 출력을 얻습니다.

    당신은 push 추가하려는 데이터에 대해 또는 b) 방법을 변경하여 Node . ㅏ)

    # n1 = Node(1)
    # n2 = Node(2)
    # n3 = Node(3)
    list = Circular_list()
    list.push(1)          # change here
    list.push(2)          # change here
    list.push(3)          # change here
    list.show()
    
    

    또는 b) :

    def push(self, node):          # change here
        # node = Node(data)
    
    

    둘 다 출력을 제공합니다.

    1 2 3 1
    
    

관련 자료

  • 이전 HashSet 개수 비교 자바
  • 다음 xaml - ListViewItem이 포커스를받을 때 어떻게 알 수 있습니까?