Skip to content

Reverse Linked List

Example 1

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

Diagram

Reverse%20List.jpg

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

    def __repr__(self):
        return self.val

    def print(self):
        print(self.val)
        if self.next:
            self.next.print()

def reverse_list(head: ListNode) -> ListNode:
    if not head or not head.next:
        return head
    node = reverse_list(head.next)
    head.next.next = head
    head.next = None
    return node


def reverse_list_2(head: ListNode) -> ListNode:
    prev = None
    current = head
    while current:
        temp_next = current.next
        current.next = prev
        prev = current
        current = temp_next
    return prev

print("Before reverse")
node1 = ListNode(1)
node1.next = ListNode(2)
node1.next.next = ListNode(3)
node1.print()
print("After reverse")
new_node = reverse_list_2(node1)
new_node.print()
Before reverse
1
2
3
After reverse
3
2
1