# Can't understand how recursion works

# Definition for singly-linked list node.
# class ListNode:
#     def __init__(self, value, next_node=None):
#         self.value = value
#         self.next_node = next_node

# define remove_node() here
if i < 0:
return None
if i == 0:

# Test code - do not edit

I just can’t seem to understand the recursive strategy behind this approach. This is the code for removing the i-th node from a linked list. Can someone explain this code please?

Is it the recursion that’s throwing you off or the linked-list bit?

Here’s a simpler example without linked lists

def fill(a, char, i):
a[i].append(char)
if i == 0:
return
fill(a, char, i-1)

a = [[],[],[]]
fill (a, "x", 2)

#result: [['x'], ['x'], ['x']]

You might know this already but the common math example is fibonacci. Where the value of the i’th term is determined by the the sum of i-2 and i-1. Or even calculating towers of hanoi has a recursive solution as well, if you know that game.

Recursion just takes time and practice. You might have seen coding challenges to draw patterns with stars while learning for-loops, I think these types of problems are great for recursion as well.

Here’s a link to some: printing stars in pyramid shape python for loop - Google Search

Particularly good ones are things like this and similar ones…
might be tough at first…

*     *
*   *
* *
*
* *
*   *
*     *

Once you call head.next_node = remove_node(head.next_node, i - 1) with i == 0, it returns head.next_node ending the recursive calling and all other calls return head, maintaining the pointers for the rest of the list.