-
연결리스트 연습문제알고리즘/이론정리 2021. 9. 9. 17:07
연결리스트에 관한 삽입 삭제 순회의 함수들을 모두 구현한 것이다.
문제는 popAt()함수를 구현하는 것이었다.
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): if pos < 1 or pos > self.nodeCount: raise IndexError curr = self.getAt(pos) prev = self.getAt(pos-1) if self.nodeCount == 1: #유일한 노드 삭제 self.head = None self.tail = None else: if pos == 1: #첫번째꺼 삭제 self.head = curr.next elif pos == self.nodeCount: # 맨끝에꺼 삭제 self.tail = prev prev.next = None else: #맨끝이 아닌경우 prev.next = curr.next self.nodeCount -= 1 return curr.data def traverse(self): result = [] curr = self.head while curr is not None: result.append(curr.data) curr = curr.next return result def solution(x): return 0
처음 시작할 때 indexAt함수를 변형했다.
삽입 할 때와 달리 연결리스트에서 유일한 노드를 삭제할 때는 또 다른 IF문으로 처리를 해줘야했다.
그래..여기까진 맞았어
자꾸 맞는것 같은데 오류가 나서 매우 답답했음...
이유가 뭐였냐면
1. nodeCount 처리
삽입할때랑 삭제할 때의 경우를 잘 생각해보지 않았다. (insertAt 그냥 갖다 쓰다보니 ...)
2. 대입 문제
멍청하게 거꾸로 대입하고 있었다....
pos == 1 일때 self.head = curr.next 가 아니라 반대로 대입문을 작성했음 ㅜ
def popAt(self, pos): if pos < 1 or pos > self.nodeCount: raise IndexError curr = self.getAt(pos) prev = self.getAt(pos-1) if self.nodeCount == 1: #유일한 노드 삭제 self.head = None self.tail = None else: if pos == 1: #첫번째꺼 삭제 self.head = curr.next elif pos == self.nodeCount: # 맨끝에꺼 삭제 self.tail = prev prev.next = None else: #맨끝이 아닌경우 prev.next = curr.next self.nodeCount -= 1 return curr.data
'알고리즘 > 이론정리' 카테고리의 다른 글
그리디(Greedy) 알고리즘 (0) 2022.08.03 양방향 연결리스트(Doubly Linked Lists) (0) 2021.09.14 연결리스트 (2) (0) 2021.09.09 연결리스트(Linked Lists) (0) 2021.09.08 알고리즘의 복잡도 (0) 2021.09.08