Programmers/데브코스 인공지능

[프로그래머스 스쿨 AI] Day 1 8강 연결 리스트(Linked List)

1. 연결 리스트(Linked Lists) 

1. 연결 리스트

이번엔 삭제다 중간에 노드를 삭제하고 이어주는 방법이다

2. 문제 풀이

1. 연결 리스트 노드 삭제하기

 

class Node:

    def __init__(self, item):
        self.data = item
        self.next = None


class LinkedList:

    def __init__(self):
        self.nodeCount = 0
        self.head = None
        self.tail = None


    def getAt(self, pos):
        if pos < 1 or pos > self.nodeCount:
            return None

        i = 1
        curr = self.head
        while i < pos:
            curr = curr.next
            i += 1

        return curr


    def insertAt(self, pos, newNode):
        if pos < 1 or pos > self.nodeCount + 1:
            return False

        if pos == 1:
            newNode.next = self.head
            self.head = newNode

        else:
            if pos == self.nodeCount + 1:
                prev = self.tail
            else:
                prev = self.getAt(pos - 1)
            newNode.next = prev.next
            prev.next = newNode

        if pos == self.nodeCount + 1:
            self.tail = newNode

        self.nodeCount += 1
        return True


    def popAt(self, pos):
        data = 0
        if pos < 1 or pos >self.nodeCount:
            raise IndexError
            
        if self.nodeCount == 1:
            data = self.head.data
            self.head = None
            self.tail = None
        elif pos == 1:
            data = self.head.data
            self.head = self.head.next
            
        elif pos == self.nodeCount:
            prev = self.getAt(pos -1)
            data = prev.next.data
            prev.next = None
            self.tail = prev
        else:
            prev = self.getAt(pos -1)
            data = prev.next.data
            prev.next = prev.next.next
        self.nodeCount -= 1
        
        return data


    def traverse(self):
        result = []
        curr = self.head
        for i in range(self.nodeCount):
            result.append(curr.data)
            curr = curr.next
        return result


def solution(x):
    a = LinkedList()
    print(a.insertAt(1,Node(3)))
    print(a.insertAt(2,Node(14)))
    print(a.insertAt(2,Node(23)))
    print(a.insertAt(2,Node(23)))
    print(a.insertAt(2,Node(3)))
    print(a.insertAt(2,Node(322)))
    print(a.traverse())
    print(a.popAt(6))
    print(a.traverse())
    return 0

3. 코딩후기

하나씩 안돼는게 있다  뭐가 안되는지 모르니 답답하다