이중 연결 리스트(Doubly linked list)_삽입

코드

#이중 링크드 리스트
class DLinkedList:

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

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

    #head로 삽입. v : 데이터
    def insertNodeBefore(self, v):
        #저장된 노드가 없을 경우
        if self.head is None:
            self.head = self.Node(v)
            self.tail = self.head #같은 노드를 가리킴
        else:
            #self.head : 기존노드, self.head.prev : 기존노드의 prev
            self.head.prev = self.Node(v,n=self.head) #1,2번을 동시수행
            #self.head.prev : 기존노드의 prev == 새로운 노드
            self.head = self.head.prev #3. head를 새로운 노드로 변경


    #tail로 삽입. v : 데이터
    def insertNodeAfter(self, v):
        #저장된 노드가 없을 경우
        if self.tail is None:
            self.tail = self.Node(v)
            self.head = self.tail #같은 노드를 가리킴
        else:
            #self.tail : 기존노드, self.tail.next : 기존 노드의 next
            self.tail.next = self.Node(v,p=self.tail) #1,2번을 동시수행
            #self.tail.next : 기존노드의 next == 새로운 노드
            self.tail = self.tail.next #3. tail를 새로운 노드로 변경

##테스트
if __name__=="__main__":
    dl = DLinkedList()
    dl.insertNodeBefore('1st')  # head삽입 테스트
    dl.insertNodeBefore('2nd')  # head삽입 테스트
    dl.insertNodeBefore('3rd')  # head삽입 테스트
    dl.insertNodeAfter('B1st') # tail삽입 테스트
    dl.insertNodeAfter('B2nd') # tail삽입 테스트
    dl.insertNodeAfter('B3rd') # tail삽입 테스트

설명




참고
https://wikidocs.net/34404

좋은 웹페이지 즐겨찾기