우선 단일 링크드 리스트인을 연습삼아 구현하면서 링크드 리스드인 이해를 해보도록 하겠습니다.
장점
단점
# class Node:
# def __init__(self, data):
# self.data = data
# self.next = None
# 클래스로 노드생성 구현하기 (data,next)
# 클래스가 생성될때 __init__ 메소드가 실행 된다.
class Node:
def __init__(self, data, next=None):
self.data = data
self.next = next
node1 = Node(1) // node1.data == 1 , node.next == None
node2 = Node(2)
# 두 노드를 이어줄려면 next값에 다음 노드를 가르키면 된다.
node1.next = node2
# 제일 앞노드 값은 무조건 알고 있어야 한다.
# head값에다가 할당
head = node1
# 링크드리스트에 데이터 추가하기
# 제일 마지막값에 데이터를 추가해야 하므로 제일 마지막 노드를 알아야 한다.
# 링크드 리스트는 노드간에 연결이 되어 있고 제일 처음노드를 head변수에 할당에 했기 때문에
# 반복문을 통해서 제일 마지막노드를 찾아보자
# 데이터 추가 함수
def add(data):
# 제일 처음노드 찾기
node = head # head에 제일 처음노드가 할당되어 있음
while node.next:
# 만약 노드에 next값이 있을경우 => 다음값이랑 연결되어 있음
# 만약에 노드의 next값이 null일 경우 제일 마지막 노드인걸 알수 있음
node = node.next # node.next에 다음 노드값이 연결에 되어 있기때문에 node에 할당해준다.
# 제일 마지막값이 node변수 저장 되어있고 node.next에 Node를 생성해서 넣어준다.
# 제일 마지막 노드의 next에는 None이기 때문에
node.next = Node(data) // Node가 하나 생성되고 node.next와 연결이 이루어짐
# 링크드리스트인 데이터 출력
def search():
node = head
while node.next:
print(node.data)
node = node.next
print(node.data) # 제일 마지막 데이터 출력하기
add 함수와 비슷하다....
# 특정 노드 앞에 노드 삽입하기
node = head // 제일 처음 노드를 변수에 할당
# 특정노드를 찾으면 False로 변환
search = True
new_node = Node(1.5)
while search:
if node.data == 1:
search = False
else:
node = node.next
node_next = node.next # 현재 Node의 연결되어 있는 노드를 변수에 할당 => 나중에 쓰기위해
node.next = new_node # 삽입할 노드를 현재 노드의 next와 연결
node_next = new_node.next # 새롭게 삽입한 노드의 next의 값을 다음 Node와 연결
(출처: wikipedia, https://en.wikipedia.org/wiki/Linked_list)