강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của dablro12320596
dablro12320596

câu hỏi đã được viết

Bí quyết đỗ 38 nơi, các thuật toán bắt buộc cho kỳ thi Coding Test 2025

2-5. Triển khai danh sách liên kết - 2

Linked List Element Delete Explanation Problem

Đã giải quyết

Viết

·

52

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

Câu trả lời 2

0

dingcodingco님의 프로필 이미지
dingcodingco
Người chia sẻ kiến thức

안녕하세요 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 함수에서는 노드를 삭제할 때, 중간 단계가 누락되어 있어서 문제가 발생합니다. 현재 코드는 다음과 같은 두 가지 문제점이 있습니다:

  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()을 통해 노드를 삭제한 후에도 링크드 리스트가 올바르게 출력될 것입니다.

코드 구현에 도움이 되셨길 바랍니다! 추가 질문이 있으시면 언제든지 말씀해 주세요. 😊

이미지:
강의자료
해당 정보는 여기에서 확인하실 수 있습니다.

Hình ảnh hồ sơ của dablro12320596
dablro12320596

câu hỏi đã được viết

Đặt câu hỏi