[
linked list
two pointers
]
Leetcode 0206 Reverse Linked List
Problem statement
https://leetcode.com/problems/reverse-linked-list/
Solution
The idea is to keep 2 pointers for current and next node and then iterate through nodes and reconnect nodes. The best way to understand this solution is to take some small list, for example 1 -> 2 -> 3 -> 4 -> None and see what is going on on the each step.
- In the beginning
curr = None, nxt = 1. - On the first step we have:
tmp = 2,nxt.next = None,curr = 1,nxt = 2. So what we have is the following:None <- 1 2 -> 3 -> 4 -> None. That is we cut one link between1and2and create new link1 -> None. - On the next step we have
None <- 1 <- 2 3 -> 4 -> Noneand so on.
Try to draw it on the paper, step by step, it is the best way to feel it.
Complexity
Time complexity is O(n), space is O(1).
Code
class Solution:
def reverseList(self, head):
curr = None
nxt = head
while nxt:
tmp = nxt.next
nxt.next = curr
curr = nxt
nxt = tmp
return curr