Python Linked List Functionality Problem

Hey everyone. So recently I’ve been learning about linear data structures and wanted to implement my own version of Linked List in python for practice. And I’ve noticed that many functions use same iteration and i wonder if there is any possible way to extract that iteration into separate function and re-use it.
For example I’have wrote a function which adds new node to the tail of the list.

def add_tail_node(self, value):
        new_node = Node(value)
        if self.is_empty():
            self.head_node = new_node
        else:
            current_node = self.head_node
            while current_node:
                if current_node.get_next_node() == None:
                    current_node.set_next_node(new_node)
                    return
                current_node = current_node.get_next_node()

My idea is to split this function into 3 separate ones:

def add_tail_node(self, value):
        new_node = Node(value)
        if self.is_empty():
            self.head_node = new_node
        else:
            add_tail()

    def add_tail(self, current_node, new_node):
        if current_node.get_next_node == None:
            self.head_node.set_next_node(new_node)
            return

    def iterate(self, list_function):
        current_node = self.head_node
        while current_node:
            list_function()
            current_node = current_node.get_next_node()