Singly LinkedList 구현

김가람·2023년 3월 19일
0

Singly LinkedList

1. Node

class Node: # LinkedList를 구성하는 Node를 class 공간에 정의
    def __init__(self ,data, next = None) -> None:
        self.data = data # Node의 data
        self.index = None # Node를 indexing 하기위해 추가
        self.next = next # Singly Linke를 위한 property 정의

2. LinkedList

class SinglyLinkedList: # 각 Node를 연결하는 LinkedList 정의
    def __init__(self) -> None:
        self.head = None # LinkedList의 head 정의
    
    
    def prepend(self, node : Node) -> None: # LinkedList 맨 앞에 node 추가
        node.next = self.head
        self.head = node
        
    
    def append(self, node : Node) -> None: # LinkedList 맨 뒤에 node 추가
        if self.head is None:
            self.head = node
        else:
            i = self.head
            while i.next is not None:
                i = i.next
            i.next = node

            
    def show(self) -> list: # LinkedList로 연결된 node들의 data를 앞에서부터 순차적으로 출력
        result = []
        i = self.head
        while i:
            result.append(i.data)
            i = i.next
        return result
        
    
    def count(self, val): # LinkedList 내 특정값의 갯수를 반환
        cnt = 0
        i = self.head
        while i:
            if i.data == val:
                cnt += 1
            i = i.next
        return cnt
    
    
#     def sort(self, node : Node) -> None:
#         if self.head is None:
#             self.head = node
#         else:
#             i = self.head
#             while i is not None:
#                 if node.data < i.data:
#                     node.next = i.next
#                     i.next = node
# #                 else:
# #                     i = node.next
#                 i = i.next
            
a = Node(0)
b = Node(1)
c = Node(2)
d = Node(3)

singlylist1 = SinglyLinkedList()
singlylist2 = SinglyLinkedList()
singlylist1.prepend(a)
singlylist1.prepend(b)
singlylist1.prepend(c)
singlylist1.prepend(d)
singlylist1.show()
[3, 2, 1, 0]
e = Node(10)
f = Node(12)
g = Node(9)
h = Node(53)

singlylist2.append(e)
singlylist2.append(f)
singlylist2.append(g)
singlylist2.append(h)
singlylist2.show()
[10, 12, 9, 53]
singlylist2.count(8)
0
i = Node(13)
j = Node(11)
k = Node(28)
l = Node(35)


singlylist3 = SinglyLinkedList()

singlylist3.sort(i)
singlylist3.sort(j)
singlylist3.sort(k)
singlylist3.sort(l)
singlylist3.show()
[13]
profile
부캐:데이터 사이언티스트가 되고 싶은 반도체 공장 노예

0개의 댓글