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. 코딩후기
하나씩 안돼는게 있다 뭐가 안되는지 모르니 답답하다
'Programmers > 데브코스 인공지능' 카테고리의 다른 글
[프로그래머스 스쿨 AI] Weak 2 numpy [windows] (0) | 2021.04.26 |
---|---|
[프로그래머스 스쿨 AI] Week 2 jupyter notebook 실행에러[window] (0) | 2021.04.26 |
[프로그래머스 스쿨 AI] Day 1 7강 연결 리스트(Linked Lists) (0) | 2021.04.20 |
[프로그래머스 스쿨 AI] Day 1 6강 알고리즘의 복잡도 (0) | 2021.04.20 |
[프로그래머스 스쿨 AI] Day 1 5강 재귀적 이진 탐색 구현하기 (0) | 2021.04.20 |