Linked List Element Delete Explanation Problem
1. 현재 학습 진도
몇 챕터/몇 강을 수강 중이신가요?
어떤 알고리즘을 학습하고 계신가요?
여기까지 이해하신 내용은 무엇인가요?
2. 어려움을 겪는 부분
어느 부분에서 막히셨나요?
코드의 어떤 로직이 이해가 안 되시나요?
어떤 개념이 헷갈리시나요?
3. 시도해보신 내용
문제 해결을 위해 어떤 시도를 해보셨나요?
에러가 발생했다면 어떤 에러인가요?
현재 작성하신 코드를 공유해주세요
이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
아래 코드(TODO; 제가 만든 삭제코드, 정답지; 제공된 교재 답 풀이본) 에 대해 문의드립니다.
5,9,12,27 일때 정답지를 통해 결과를 뽑아보면 삭제가 안되는 현상이 일어납니다. 이와 관련해 어떻게 생각하실지 여쭙습니다!
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self, value):
self.head = Node(value)
def append(self, value):
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = Node(value)
def print_all(self):
cur = self.head
while cur is not None:
print(cur.data)
cur = cur.next
def get_node(self, index):
node = self.head
count = 0
while count < index:
node = node.next
count += 1
return node
def add_node(self, index, value):
new_node = Node(value)
if index == 0:
new_node.next = self.head
self.head = new_node
return
node = self.get_node(index - 1)
next_node = node.next
node.next = new_node
new_node.next = next_node
# def delete_node(self, index): # TODO
# if index == 0: # 첫번째 노드를 불러와야 출력이 가능하므로 0번째 인덱스를 제거하려고하면 1번쨰 인덱스를 head로 지정
# self.head = self.head.next
# return
# before_node = self.get_node(index-1) # 1. 제거해야할 노드 이전 노드 찾기
# delete_node = self.get_node(index)
# before_node.next = delete_node.next # 2. 이전 노드 next를 제거할 노드의 next로
# delete_node.next = None # 3. 제거할 노드의 next 를 None
# return "index 번째 Node를 제거해주세요!"
def delete_node(self, index): # 정답지
if index == 0: # 첫번째 노드를 불러와야 출력이 가능하므로 0번째 인덱스를 제거하려고하면 1번쨰 인덱스를 head로 지정
self.head = self.head.next
return
before_node = self.get_node(index-1) # 1. 제거해야할 노드 이전 노드 찾기
before_node = before_node.next.next
return "index 번째 Node를 제거해주세요!"
linked_list = LinkedList(5)
linked_list.append(9)
linked_list.append(12)
linked_list.append(27)
print("제거 전")
linked_list.print_all()
print("제거 후")
linked_list.delete_node(3)
linked_list.print_all()
Answer 2
0
안녕하세요 D.H 님 좋은 질문 감사합니다!
delete_node 함수에서 아래 코드가 다른 것 같습니다!
# 제출해주신 내용
before_node = before_node.next.next # ❌ 변수에 새 값을 "할당"만 함
# 교재의 코드
node.next = node.next.next # ✅ 포인터를 실제로 "연결" 변경차이가 보이시나요? = 왼쪽이 다릅니다.
제출해주신 코드는 before_node라는 지역 변수에 새로운 노드 주소를 담기만 하고, 실제 연결 리스트의 연결 구조는 전혀 건드리지 않아요. 마치 "다음 칸 주소 메모지를 새로 쓴 것"일 뿐, 기차 연결고리 자체를 바꾼 게 아닙니다
반면 node.next = ...는 실제로 해당 노드의 next 포인터, 즉 "연결고리 자체"를 변경하는 거예요.한 번 해당 부분을 수정해보시고 해결해보시면 좋을 것 같습니다!
직접 코드를 작성해보시고 시도해보시는 점 넘넘 좋습니다! 편하게 또 질문주세요 감사합니다
0
안녕하세요, 인프런 AI 인턴입니다.
D.H Github님께서 작성하신 delete_node 함수에서 문제가 발생하는 이유를 설명드리겠습니다.
정답지로 제공된 delete_node 함수에서는 노드를 삭제할 때, 중간 단계가 누락되어 있어서 문제가 발생합니다. 현재 코드는 다음과 같은 두 가지 문제점이 있습니다:
before_node = before_node.next.next는before_node를 제거하려는 노드의 다음 노드로 연결하는 것이 아니라before_node를 잘못 덮어쓰고 있습니다.제거된 노드의
next속성을None으로 설정하는 과정이 누락되어 메모리 누수가 발생할 수 있습니다.
delete_node 메서드는 다음과 같이 작성하는 것이 올바릅니다:
def delete_node(self, index):
if index == 0:
self.head = self.head.next
return
before_node = self.get_node(index-1)
delete_node = before_node.next
before_node.next = delete_node.next
delete_node.next = None
return "Node 삭제 완료했습니다!"
이제 print_all()을 통해 노드를 삭제한 후에도 링크드 리스트가 올바르게 출력될 것입니다.
코드 구현에 도움이 되셨길 바랍니다! 추가 질문이 있으시면 언제든지 말씀해 주세요. 😊
수강평 이벤트
0
15
2
코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요
0
57
2
3-3 정렬-2 선택정렬 로직
0
37
2
링크드 리스트 끝에서 k번째 값 출력하기
0
43
2
LinkedList 과제 Fast, slow 포인터
0
49
2
투포인터 시간복잡도
0
50
2
수강평 작성 후 자료
0
51
2
수업교재 링크 오류
2
106
2
프로그래머스에서 제출 후 채점시 틀림ㅠ
0
127
2
1-10 알고리즘 더 풀어보기(2) 질문 있습니다
0
69
2
문제 풀이 방식 관련 질문입니다!
0
81
2
1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다
0
88
2
수업자료 pdf 받고싶습니다
0
104
2
강의 자료 오류 수정
0
71
1
2-10 더하거나 빼거나 관련 질문입니다
0
61
2
3-8 해쉬 -2
0
48
2
강의3-4 스택 탑 문제
0
74
2
코드스니펫 입출력 케이스에 오류가 있는것 같아요
0
98
3
링크드 리스트 원소 찾기 구현 방식 질문드립니다.
0
74
2
1874 - 스택 문항
0
80
2
DP Java 예제 자료형 오버플로우 문제
0
97
2
4-9 4주차 숙제중 농심라면 문제
0
109
2
DFS 에서 스택을 사용하는 이유
1
184
3
들여쓰기가 햇갈리네요
0
120
2

