inflearn logo
강의

Course

Instructor

The secret to passing 38 companies, essential algorithms for the 2026 coding test

2-5. Linked List Implementation - 2

Linked List Element Delete Explanation Problem

Resolved

66

dablro12320596

1 asked

0

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()

 

 

python 코딩-테스트 알고리즘 data-structure

Answer 2

0

dingcodingco

안녕하세요 D.H 님 좋은 질문 감사합니다!

delete_node 함수에서 아래 코드가 다른 것 같습니다!

# 제출해주신 내용
before_node = before_node.next.next   # ❌ 변수에 새 값을 "할당"만 함

# 교재의 코드
node.next = node.next.next            # ✅ 포인터를 실제로 "연결" 변경

차이가 보이시나요? = 왼쪽이 다릅니다.

제출해주신 코드는 before_node라는 지역 변수에 새로운 노드 주소를 담기만 하고, 실제 연결 리스트의 연결 구조는 전혀 건드리지 않아요. 마치 "다음 칸 주소 메모지를 새로 쓴 것"일 뿐, 기차 연결고리 자체를 바꾼 게 아닙니다

반면 node.next = ...는 실제로 해당 노드의 next 포인터, 즉 "연결고리 자체"를 변경하는 거예요.한 번 해당 부분을 수정해보시고 해결해보시면 좋을 것 같습니다!

직접 코드를 작성해보시고 시도해보시는 점 넘넘 좋습니다! 편하게 또 질문주세요 감사합니다

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

D.H Github님께서 작성하신 delete_node 함수에서 문제가 발생하는 이유를 설명드리겠습니다.

정답지로 제공된 delete_node 함수에서는 노드를 삭제할 때, 중간 단계가 누락되어 있어서 문제가 발생합니다. 현재 코드는 다음과 같은 두 가지 문제점이 있습니다:

  1. before_node = before_node.next.nextbefore_node를 제거하려는 노드의 다음 노드로 연결하는 것이 아니라 before_node를 잘못 덮어쓰고 있습니다.

  2. 제거된 노드의 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