재미로 Python으로 Linked list 구현해보기
2020. 2. 1. 23:59ㆍ개발/Python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = Node("head")
self.last = self.head
self.numData = 0
self.sorted = False
def append(self, data):
newNode = Node(data)
self.last.next = newNode
self.last = newNode
self.numData += 1
self.sorted = False
def slice(self, idx1, idx2):
assert idx1 >= 1 and idx2 <= self.numData + 1
assert idx1 < idx2
arr = LinkedList()
currentNode = self.head
for i in range(self.numData):
currentNode = currentNode.next
if i >= idx1 - 1 and i < idx2 - 1:
arr.append(currentNode.data)
return arr
def define(self, arr):
arr = arr[1:-1].replace(" ","")
arr = arr.split(",")
for num in arr:
self.append(int(num))
def delete(self, idx):
if idx > self.numData or idx <= 0:
print("you cannot delete that index")
else:
beforeNode = self.search(idx-1)
beforeNode.next = beforeNode.next.next
self.numData -= 1
def search(self, idx):
if idx == 0:
return self.head
elif idx > self.numData or idx < 0:
print("you cannot delete that index")
return
else:
cnt = 0
currentNode = self.head
while cnt != idx:
currentNode = currentNode.next
cnt += 1
return currentNode.data
@staticmethod
def sortTwo(arr1, arr2):
arr1Current = arr1.head.next
arr2Current = arr2.head.next
newarr = LinkedList()
while arr1Current != None and arr2Current != None:
if arr1Current.data <= arr2Current.data:
newarr.append(arr1Current.data)
arr1Current = arr1Current.next
else:
newarr.append(arr2Current.data)
arr2Current = arr2Current.next
if arr1Current == None:
while arr2Current != None:
newarr.append(arr2Current.data)
arr2Current = arr2Current.next
else:
while arr1Current != None:
newarr.append(arr1Current.data)
arr1Current = arr1Current.next
return newarr
def sort(self):
self.sorted = True
if self.numData == 1:
self.sorted = True
return self
else:
arr1 = self.slice(1, int(self.numData / 2) + 1)
arr2 = self.slice(int(self.numData / 2)+ 1, self.numData + 1)
arr1 = arr1.sort()
arr2 = arr2.sort()
return self.sortTwo(arr1, arr2)
a = LinkedList()
b = LinkedList()
a.append(1)
a.append(3)
a.append(2)
a.append(4)
c = a.sort()
print(c.search(2))
d = LinkedList()
d.define("[1,2,3, 4]")
print(d.numData)
print(d.search(3))
'개발 > Python' 카테고리의 다른 글
20200924 - Python Thread pool, Cache, Mocking snowflake cursor (0) | 2020.09.24 |
---|---|
20200728 python 관련 사소한 팁 (0) | 2020.07.28 |
20200312 함수 내 import, exception (0) | 2020.03.12 |