단방향 연결 리스트를 뒤집는 문제
https://leetcode.com/problems/reverse-linked-list/
# 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:
if head is None:
return head
else:
reversedHead, _ = self.__reverseListIteratively( head )
head.next = None
return reversedHead
def __reverseListIteratively( self, head ):
if head is None:
return None, None
else:
reversedHead, reversedTail = self.__reverseListIteratively( head.next )
if reversedTail is None:
return head, head
else:
reversedTail.next = head
return reversedHead, head
def __reverseListRecusively( self, head, otherHead = None ):
'''연결 리스트의 말단까지 들어가면서 연결을 뒤집는다
'''
if head is None:
return head
else:
newHead = head.next
# 말단에 도달했으면 이전 노드를 말단으로 삼는다
if newHead is None:
head.next = otherHead
return head
else:
# 처음으로 탐색했으면 첨단 노드가 다음 노드를 가리키지 않도록 한다
if otherHead is None:
otherHead = head
head.next = None
# 탐색 중이면 이전 노드를 가리키도록 한다
else:
head.next = otherHead
otherHead = head
return self.__reverseListRecusively( newHead, otherHead )
'코드' 카테고리의 다른 글
| Climbing Stairs (0) | 2019.10.24 |
|---|---|
| Fibonacci Number (0) | 2019.10.24 |
| Swap Nodes in Pairs (0) | 2019.10.24 |
| Reverse String (0) | 2019.10.24 |
| 랜덤 던전 생성 (0) | 2019.09.10 |