편집 기록

편집 기록
  • 프로필 엽토군님의 편집
    날짜2023.03.28

    파이썬 연결 리스트 질문드립니다.


    파이썬 알고리즘 책으로 공부 중인데 연결 리스트 부분에서 변수 값 변환되는게 이해되지 않아서 질문드립니다.

    연결 리스트는 head : 1->2->3->4->5->6 이고 중간에 2~5를 역순으로 뒤집어 1->5->4->3->2->6으로 변환하는 문제입니다.

    중간에 반복 구조로 노드를 뒤집는 부분에서

    root = start = ListNode(None)
    root.next = head            # root : None-1-2-3-4-5-6
    for _ in range(m-1):
        start = start.next      # start : 1-2-3-4-5-6
    
    end = start.next            # end : 2-3-4-5-6
    
    for _ in range(n-m):
        tmp = start.next            # tmp : 2-3-4-5-6
        start.next = end.next       # start : 1-3-4-5-6
        end.next = end.next.next    # end : 2-4-5-6
        start.next.next = tmp       # start : 1-3-2-3-4-5-6??
    

    이런 풀이가 나오는데 제가 생각하기로는 주석달아 놓은거처럼 바뀔거같은데 확인해보니까 end.next = end.next.next 이 부분에서 tmpend와 같은 값으로 변환되더라고요...

    그 이유를 좀 알 수 있을까요?

  • 프로필 노주현님의 편집
    날짜2023.03.26

    파이썬 연결 리스트 질문드립니다.


    파이썬 알고리즘 책으로 공부 중인데 연결 리스트 부분에서 변수 값 변환되는게 이해되지 않아서 질문드립니다.

    연결 리스트는 head : 1->2->3->4->5->6 이고 중간에 2~5를 역순으로 뒤집어 1->5->4->3->2->6으로 변환하는 문제입니다.

    중간에 반복 구조로 노드를 뒤집는 부분에서

    root = start = ListNode(None)
    root.next = head            # root : None-1-2-3-4-5-6
    for _ in range(m-1):
        start = start.next      # start : 1-2-3-4-5-6
    end = start.next            # end : 2-3-4-5-6
    
    for _ in range(n-m):
        tmp = start.next            # tmp : 2-3-4-5-6
        start.next = end.next       # start : 1-3-4-5-6
        end.next = end.next.next    # end : 2-4-5-6
        start.next.next = tmp       # start : 1-3-2-3-4-5-6??
    

    이런 풀이가 나오는데 제가 생각하기로는 주석달아 놓은거처럼 바뀔거같은데 확인해보니까 end.next = end.next.next 이 부분에서 tmp가 end와 같은 값으로 변환되더라고요...

    그 이유를 좀 알 수 있을까요?