프로그래밍

[자료구조] Python 파이썬으로 이중연결 정렬 리스트 구현하기 코드 설명

판다의 삶 2020. 6. 2. 13:14
728x90
class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublySortedLinkedList:
    def __init__(self):
        self.head = None
        self.count = 0
        
    def append(self, node):
        if self.count == 0:
            self.head = node
            self.count = 1
            
        else:
            cur_node = self.head
            prev_node = None 
            
            # cur_node의 data와 node의 data를 비교하며 삽입 위치 파악
            while(cur_node != None and cur_node.data <= node.data):
                prev_node = cur_node
                cur_node = cur_node.next
			
            # node의 next를 cur_node로 설정
            node.next = cur_node
            
            # cur_node가 마지막 노드가 아닌 경우 prev를 node로 설정
            if not (cur_node == None):
                cur_node.prev = node
            
            # node의 data가 가장 작아 head에 삽입되어야 하는 경우 node를 head로 설정
            if (prev_node == None):
                self.head = node
            # node가 리스트 중간에 삽입되어야 하는 경우 prev_node의 next를 node로 설정
            # node의 prev도 prev_node로 설정
            else:
                prev_node.next = node
                node.prev = prev_node
            self.count+=1
            
            
    def print_all(self):
        if self.count == 0:
            print('')
        else:
            tmp_node = self.head
            while (tmp_node != None):
                print(tmp_node.data, end=" ")
                tmp_node = tmp_node.next
        
                
if __name__ == '__main__':
    doubly_sorted_linked_list = DoublySortedLinkedList()
    for n in [4,5,2,7,99,-1,0,19]:
        node = Node(n)
        doubly_sorted_linked_list.append(node)
    doubly_sorted_linked_list.print_all()
    # -1 0 2 4 5 7 19 99
    
        
                
728x90