프로그래밍
[자료구조] 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