Python Challenge - Swap Elements in a Linked List

This community-built FAQ covers the “Swap Elements in a Linked List” code challenge in Python. You can find that challenge here, or pick any challenge you like from our list.

Top Discussions on the Python challenge Swap Elements in a Linked List

There are currently no frequently asked questions or top answers associated with this challenge – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this challenge. Ask a question or post a solution by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this challenge, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in Language Help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

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()