206. Reverse Linked List

2021. 11. 9. 12:49Leetcode

Description:

Given the head of a singly linked list, reverse the list, and return the reversed list.

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

'''
[1] iterative)

code::
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
    prev=None
    cur=head
    next=cur
    while cur:
        next=cur.next
        cur.next=prev
        prev=cur
        cur=next
    return prev

-T/C: O(n)
-S/C: O(1)
'''
'''
[1] recursive)

code::
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
    if not head:
        return head
    return self.reverse(None,head)

def reverse(self,prev,cur):
    if not cur:
        return prev
    next=cur.next
    cur.next=prev
    prev=cur
    cur=next
    return self.reverse(prev,cur)

-T/C: O(n)
-S/C: O(n)
'''
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return head
        return self.reverse(None,head)
        
    def reverse(self,prev,cur):
        if not cur:
            return prev
        next=cur.next
        cur.next=prev
        prev=cur
        cur=next
        return self.reverse(prev,cur)

'Leetcode' 카테고리의 다른 글

438. Find All Anagrams in a String  (0) 2021.11.09
141. Linked List Cycle  (0) 2021.11.09
5. Longest Palindromic Substring  (0) 2021.11.08
96. Unique Binary Search Trees  (0) 2021.11.08
647. Palindromic Substrings  (0) 2021.11.08