I made a generator function to have an iterator through the nodes of the linked list first.
Swapping the nodes themselves proved too unwieldy, so I just swapped their .data
my code
from LinkedList import *
def linked_list_iterator(head_node):
# generator function for iterating through all nodes
yield head_node
current = head_node
while hasattr(current, "next") and current.next is not None:
yield current.next
current = current.next
def swap_nodes(input_list, val1, val2):
have_node1 = False
have_node2 = False
previous = None
for node in linked_list_iterator(input_list):
if (not have_node1) and (node.data == val1):
node1 = node
previous1 = previous
have_node1 = True
elif (not have_node2) and (node.data == val2):
node2 = node
previous2 = previous
have_node2 = True
elif (have_node1 and have_node2):
break;
previous = node
# swap data
temp_data = node1.data
node1.data = node2.data
node2.data = temp_data
return input_list
demo_list = make_linked_list([1, 2, 3, 4, 5, 6])
swap_nodes(demo_list, 2, 5)
demo_list.print_linked_list()