최소 단위인 Node의 경우 value와 nextnode를 갖으며 아래 코드가 기본적인 Node 코드이다.
class Node():
def __init__(self, value):
self.value = value
self.nextnode = None
Linked list의 경우 이러한 node가 여러개 연결되어 있으며 first node -> head, last node ->tail 이라 부른다. 또한 tail의 경우에는 tail.nextnode가 None이 된다.
Linked list에서의 핵심 키워드 중 하나는 traversing이다. 어떤 값을 찾는 데에 있어 Head부터 Tail까지 node를 각각 방문해 가며 찾는 것을 traversing이라 하며, 이 때 현재 확인하고 있는 node를 가리켜 'pointer'라고 한다.
아래와 같은 sequence를 따른다.
1. input value에 맞춰 new node를 만든다.
2. new node의 nextnode를 현재 Headnode로 설정한다.
3. Head를 new node로 재할당해준다.
linked list의 경우 Head부터 순차적으로 탐색이 가능하므로 tail 쪽에서의 insert나 remove는 어렵다.
linked list cycle에서 two pointer runner idea!
Doubly Linked List라고 해서 크게 달라지는 것은 없다. 다만 Linked List에 존재하던 여러 단점을 극복할 수 있게된다.
기본 단위 Node는 살짝 수정된다.
class DoublyNode():
def __init__(self, value):
self.value = value
self.nextnode = None
self.prevnode = None
이런 식으로 기존 node에서는 value와 nextnode만 존재했다면 DLL에서는 prevnode라는 것이 존재하게 된다.