Skip to content
58 changes: 58 additions & 0 deletions data_structures/linked_list/reverse_linked_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
"""
https://www.enjoyalgorithms.com/blog/reverse-linked-list
"""


class ListNode:
"""Definition for singly-linked list."""

def __init__(self, val=0, next=None):

Check failure on line 9 in data_structures/linked_list/reverse_linked_list.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (A002)

data_structures/linked_list/reverse_linked_list.py:9:31: A002 Function argument `next` is shadowing a Python builtin

Check failure on line 9 in data_structures/linked_list/reverse_linked_list.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (A002)

data_structures/linked_list/reverse_linked_list.py:9:31: A002 Function argument `next` is shadowing a Python builtin
Comment thread
Sangram03 marked this conversation as resolved.
Comment thread
Sangram03 marked this conversation as resolved.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: val

Please provide type hint for the parameter: next

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: val

Please provide type hint for the parameter: next

Comment thread
Sangram03 marked this conversation as resolved.
self.val = val
self.next = next


def reverse_linked_list(head: ListNode) -> ListNode:
"""
Reverse a singly linked list.

Args:
head: The head node of the linked list.

Returns:
The new head node of the reversed linked list.

Examples:
>>> a = ListNode(1)
>>> b = ListNode(2)
>>> c = ListNode(3)
>>> a.next, b.next = b, c
>>> head = reverse_linked_list(a)
>>> [head.val, head.next.val, head.next.next.val]
[3, 2, 1]
"""
prev = None
current = head
while current:
nxt = current.next
current.next = prev
prev = current
current = nxt
return prev


if __name__ == "__main__":
import doctest

doctest.testmod()

# Example execution
a = ListNode(1)
b = ListNode(2)
c = ListNode(3)
a.next, b.next = b, c

print("Original Linked List: 1 -> 2 -> 3")
new_head = reverse_linked_list(a)
print(
f"Reversed Linked List: {new_head.val} -> {new_head.next.val} -> {new_head.next.next.val}"

Check failure on line 57 in data_structures/linked_list/reverse_linked_list.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

data_structures/linked_list/reverse_linked_list.py:57:89: E501 Line too long (98 > 88)

Check failure on line 57 in data_structures/linked_list/reverse_linked_list.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

data_structures/linked_list/reverse_linked_list.py:57:89: E501 Line too long (98 > 88)
)
Loading