8_15 연결 리스트(역순 연결리스트)

김동민·2021년 10월 15일
0


연결리스트를 뒤집어라

1. 재귀구조로 뒤집기

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        def reverse(node: ListNode, prev: ListNode = None):
            if not node:
                return prev
            next, node.next = node.next, prev
            return reverse(next, node)

        return reverse(head)

다음 노트 next와 현재 노드를 계속해서 재귀 호출하면서 node가 none이 될때 까지 반복하면서 마지막에는 연결리스트가 거꾸로 연결된다.

2.반복 구조로 뒤집기

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        node, prev = head, None

        while node:
            next, node.next = node.next, prev
            prev, node = node, next

        return prev

1번과 똑같이 next.node를 prev리스트로 계속 연결하면서 끝날 때 까지 반복한다.

둘다 시간은 크게 차이가 나지 않지만 메모리를 반복 구조로 뒤집는 것이 조금이나마 적게 먹는 것 같다.

profile
틀리면 당신이 맞습니다... 개발하며 얻은 지식창고

0개의 댓글