반원 블로그

02b. 단일 연결 리스트(singly linked list) - ii. 삽입 본문

2018~/파이썬 자료구조 알고리즘

02b. 단일 연결 리스트(singly linked list) - ii. 삽입

반원_SemiCircle 2019. 4. 28. 03:41

삽입

단일 연결 리스트의 삽입은 head쪽에 노드를 계속 추가하며 우겨넣는(?)방식입니다.

저장된 노드가 없는 경우

먼저 아무런 노드도 없는 경우는 head값이 None입니다. 따라서 다음처럼 삽입이 이루어집니다.

 

저장된 노드가 있는 경우

그런데 저장된 노드가 있는 경우는 기존 노드는 밀려나는 식으로 새로운 노드가 들어옵니다. 따라서 새로운 노드의 next에 현재 head값을 저장하고, head에는 새로운 노드를 저장시킵니다.

 

코드 구현

#단일 링크드 리스트
class SLinkedList:

    #S_L_list에서 쓸 노드
    class Node:
        def __init__(self, v, n = None):
            self.value = v #저장된 데이터
            self.next = n #다음 노드 가리키는 변수

    #S_L_List에서 필요한 변수
    def __init__(self):
        self.head = None #첫 생성시 내부에는 노드가 없으므로

    #삽입
    def insertNode(self, v): #추가할 데이터
        #만일 처음 노드일 경우 -> head값이 None임
        if self.head is None :
            #head에 새 노드를 저장
            self.head = self.Node(v)
        else: #이미 노드가 있는 경우
            # head에 새 노드를 저장
            # 기존 head에 저장된 노드는 새로 생성할 노드의 next로 저장
            self.head = self.Node(v,self.head)

##테스트
if __name__=="__main__":
    sl = SLinkedList()
    sl.insertNode('1st')
    sl.insertNode('2nd')
    sl.insertNode('3rd')

위키독스 연재 : https://wikidocs.net/book/2868

Comments