code: def move_one_node(soln, seed):
      """Move one node to another position to give a neighbor solution.
  
      The node to move and the position to move to are chosen randomly.
      The first and last nodes are left untouched as soln must be a cycle
      starting at that node.
  
      Parameters
      ----------
      soln : list of nodes
          Current cycle of nodes
  
      seed : integer, random_state, or None (default)
          Indicator of random number generation state.
          See :ref:`Randomness<randomness>`.
  
      Returns
      -------
      list
          The solution after move is applied. (A neighbor solution.)
  
      Notes
      -----
          This function assumes that the incoming list `soln` is a cycle
          (that the first and last element are the same) and also that
          we don't want any move to change the first node in the list
          (and thus not the last node either).
  
          The input list is changed as well as returned. Make a copy if needed.
  
      See Also
      --------
          swap_two_nodes
      """
      a, b = seed.sample(range(1, len(soln) - 1), k=2)
      soln.insert(b, soln.pop(a))
      return soln
  
file_path: networkx/networkx/algorithms/approximation/traveling_salesman.py
imports: import math
  import networkx
  from networkx.algorithms.tree.mst import random_spanning_tree
  from networkx.utils import not_implemented_for, pairwise, py_random_state
label_desc: Use image node_id 2 for calling a global function with example usage: move_one_node(soln, seed) and returns: soln