[Data Structure] Doubly Linked List(더블 링크드 리스트, 양방향 연결 리스트)

황인용·2020년 8월 4일
0

Data Structure & Algorithm

목록 보기
10/10

Doubly Linked List(더블 링크드 리스트, 양방향 연결 리스트)

  • 양방향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능

Doubly Linked List 특징

  • 처음과 끝에 dummy node를 둔 구조
  • 데이터를 담고 있는 node들이 모두 같은 구조


Doubly Linked List 구현 with Python

class Node:
    def __init__(self, data, prev=None, next=None):
        self.prev = prev
        self.data = data
        self.next = next

class NodeMgmt:
    def __init__(self, data):
        self.head = Node(data)
        self.tail = self.head
    
    def insert_before(self, data, before_data):
        if self.head == None:
            self.head = Node(data)
            return True            
        else:
            node = self.tail
            while node.data != before_data:
                node = node.prev
                if node == None:
                    return False
            new = Node(data)
            before_new = node.prev
            before_new.next = new
            new.next = node
            return True

    def insert_after(self, data, after_data):
        if self.head == None:
            self.head = Node(data)
            return True            
        else:
            node = self.head
            while node.data != after_data:
                node = node.next
                if node == None:
                    return False
            new = Node(data)
            after_new = node.next
            new.next = after_new
            new.prev = node
            node.next = new
            if new.next == None:
                self.tail = new
            return True

    def insert(self, data):
        if self.head == None:
            self.head = Node(data)
        else:
            node = self.head
            while node.next:
                node = node.next
            new = Node(data)
            node.next = new
            new.prev = node
            self.tail = new

    def desc(self):
        node = self.head
        while node:
            print (node.data)
            node = node.next
# 테스트
node_mgmt = Nodemgmt(0)
for data in range(1, 10):
    node_mgmt.insert(data)

node_mgmt.desc()

node_mgmt.insert_after(1.5, 1)
node_mgmt.desc()
0
1
2
3
4
5
6
7
8
9
0
1
1.5
2
3
4
5
6
7
8
9
profile
dev_pang의 pang.log

0개의 댓글