Problem Solving/Data Structure

[자료구조] #4_2 링크드 리스트

se0m 2021. 5. 30. 19:17

** 링크드 리스트의 복잡한 기능

- 링크드 리스트는 유지관리에 부가적인 구현이 필요함

- 중간 데이터 삽입, 삭제시

 

클릭시 출처로 이동

 

 

 

** 파이썬 객체지향 프로그래밍으로 링크드 리스트 구현


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


    # 노드 삽입
    def add(self, data):
        if self.head == '':
            self.head = Node(data)
        else:
            node = self.head
            while node.next:
                node = node.next
            node.next = Node(data)


    # 링크드 리스트 출력
    def desc(self):
        node = self.head
        while node:
            print (node.data)
            node = node.next


    # 링크드 리스트 삭제
    def delete(self, data):
        if self.head == '':
            print ("해당 값을 가진 노드가 없습니다.")
            return
        
        if self.head.data == data: # 삭제할 노드가 맨 앞 노드(head)일 경우
            temp = self.head # self.head를 바로 삭제하면 밑의 코드를 실행할 수 없음
            self.head = self.head.next
            del temp
        else:
            node = self.head
            while node.next:
                if node.next.data == data: # 삭제할 노드 탐색
                    temp = node.next
                    node.next = node.next.next # 삭제할 노드 앞뒤 노드 연결
                    del temp
                    return
                else:
                    node = node.next

 

    # 특정 데이터 값을 갖는 노드 검색

    def search_node(self, data):
        node = self.head
        while node:
            if node.data == data:
                return node
            else:
                node = node.next