Created
April 3, 2021 11:59
-
-
Save Park-Developer/6f5c16a9eda7a2e2e7dac2a2f54ed8b1 to your computer and use it in GitHub Desktop.
Linked List : FIFO Linked List
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# FIFO | |
class LinedListFIFO(object): | |
def __init__(self): | |
self.head = None # 헤드 | |
self.length = 0 | |
self.tail= None # 테일 | |
# 헤드부터 각 노드의 값을 출력한다. | |
def _printList(self): | |
node = self.head | |
while node: | |
print(node.value , end= " ") | |
node= node.pointer | |
print() | |
# 첫 번쨰 위치의 노드를 추가한다. | |
def _addFirst(self, value): | |
self.length=1 | |
node = Node(value) | |
self.head = node | |
self.tail=node | |
# 첫 번째 위치의 노드를 삭제한다. | |
def _deleteFirst(self): | |
self.length=0 | |
self.head = None | |
self.tail = None | |
print("연결 리스트가 비었습니다.") | |
# 새 노드를 추가한다. 테일은 새 노드를 가리킨다. | |
def _add(self, value ): | |
self.length +=1 | |
node = Node(value) | |
if self.tail: | |
self.tail.pointer= node | |
self.tail = node | |
# 새 노드를 추가한다. | |
def addNode(self , value): | |
if not self.head: | |
self._addFirst(value) | |
else: | |
self._add(value) | |
# 인덱스로 노드를 찾는다. | |
def _find(self, index): | |
prev = None | |
node = self.head | |
i=0 | |
while node and i < index: | |
prev = node | |
node = node.pointer | |
i+=1 | |
return node ,prev , i | |
# 값으로 노드를 찾는다. | |
def _find_by_value(self , value ): | |
prev = None | |
node = self.head | |
found = False | |
while node and not found: | |
if node.value == value: | |
found = True | |
else: | |
prev = node | |
node = node.pointer | |
return node , prev , found | |
# 인덱스에 해당하는 노드를 삭제한다. | |
def deleteNode(self, index): | |
if not self.head or not self.head.pointer: | |
self._deleteFirst() | |
else: | |
node,prev , i = self._find(index) | |
if i == index and node: | |
self.length -=1 | |
if i==0 or not prev: | |
self.head = node.pointer | |
self.tail = node.pointer # 이거맞음? | |
else: | |
prev = node.pointer | |
else: | |
print("인덱스 {0}에 해당하는 노드가 없음".format(index)) | |
# 값에 해당하는 노드를 삭제한다. | |
def deleteNodeByValue(self,value): | |
if not self.head or not self.head.pointer: | |
self._deleteFirst() | |
else: | |
node , prev , i = self._find_by_value(value) | |
if node and node.value == value : | |
self.length-=1 | |
if i==0 or not prev : | |
self.head = node.pointer | |
self.tail = node.pointer | |
else: | |
prev.pointer = node.pointer | |
else: | |
print("인덱스 {0}에 해당하는 노드가 없음".format(index)) | |
if __name__ == "__main__": | |
ll = LinedListFIFO() | |
for i in range(1,5): | |
ll.addNode(i) | |
print("연결 리스트 출력") | |
ll._printList() | |
print("인덱스가 2인 노드 삭제 후, 연결 리스트 출력") | |
ll.deleteNode(2) | |
ll._printList() | |
print("값이 15인 노드 추가 후 연결리스트 출력") | |
ll.addNode(15) | |
ll._printList() | |
print("모든 노드 모두 삭제 후, 연결 리스트 출력:") | |
for i in range(ll.length-1,-1,-1): | |
ll.deleteNode(i) | |
ll._printList() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment