class Node:
def __init__(self, key=None):
self.key = key
self.next = None
def __str__(self):
return str(self.key)
class SinglyLinkedList:
def __init__(self):
self.head = None
self.size = 0
def __len__(self):
return self.size
def printList(self): # 변경없이 사용할 것!
v = self.head
while (v):
print(v.key, "->", end=" ")
v = v.next
print("None")
def pushFront(self, key):
new_node = Node(key)
new_node.next = self.head
self.head = new_node
self.size += 1
def pushBack(self, key):
new_node = Node(key)
if self.size==0:
self.head = new_node
else:
tail = self.head
while tail.next != None:
tail = tail.next
tail.next = new_node
self.size += 1
def popFront(self):
key = value = None
if len(self) > 0:
key = self.head.key
value = self.head.value
self.head = self.head.next
self.size -= 1
return key, value
def popBack(self):
if self.size == 0:
return None
else:
prev = None
tail = self.head
while tail.next != None:
prev = tail
tail = tail.next
if prev==None:
self.head = None
else:
prev.next = tail.next
key = tail.key
del tail
self.size -= 1
return key
# tail 노드의 값 리턴.
def search(self, key):
v = self.head
while v:
if v.key == key:
return v
v = v.next
return None
def remove(self, key):
v = L.search(key)
if v == L.head:
self.popFront(v)
elif v != None :
L.remove(v)
# 노드 x를 제거한 후 True리턴. 제거 실패면 False 리턴
def size(self):
return self.size
L = SinglyLinkedList()
while True:
cmd = input().split()
if cmd[0] == "pushFront":
L.pushFront(int(cmd[1]))
print(int(cmd[1]), "is pushed at front.")
elif cmd[0] == "pushBack":
L.pushBack(int(cmd[1]))
print(int(cmd[1]), "is pushed at back.")
elif cmd[0] == "popFront":
x = L.popFront()
if x is None:
print("List is empty.")
else:
print(x, "is popped from front.")
elif cmd[0] == "popBack":
x = L.popBack()
if x is None:
print("List is empty.")
else:
print(x, "is popped from back.")
elif cmd[0] == "search":
x = L.search(int(cmd[1]))
if x is None:
print(int(cmd[1]), "is not found!")
else:
print(int(cmd[1]), "is found!")
elif cmd[0] == "remove":
x = L.search(int(cmd[1]))
if L.remove(x):
print(x.key, "is removed.")
else:
print("Key is not removed for some reason.")
elif cmd[0] == "printList":
L.printList()
elif cmd[0] == "size":
print("list has", len(L), "nodes.")
elif cmd[0] == "exit":
print("DONE!")
break
else:
print("Not allowed operation! Enter a legal one!")
top of page
실제 작동 상태를 확인하려면 라이브 사이트로 이동하세요.
220203
220203
댓글 0개
좋아요
댓글(0)
bottom of page