Programa de Python para la división alterna de un conjunto de listas 1 con enlaces individuales dados

Escriba una función AlternatingSplit() que tome una lista y divida sus Nodes para hacer dos listas más pequeñas ‘a’ y ‘b’. Las sublistas deben estar hechas de elementos alternos en la lista original. Entonces, si la lista original es 0->1->0->1->0->1, entonces una sublista debería ser 0->0->0 y la otra debería ser 1->1->1.

Método (simple): 
el enfoque más simple itera sobre la lista de fuentes y extrae Nodes de la fuente y alternativamente los coloca al frente (o al principio) de ‘a’ y b’. La única parte extraña es que los Nodes estarán en el orden inverso al que ocurrió en la lista de origen. El método 2 inserta el Node al final haciendo un seguimiento del último Node en las sublistas.

Python

# Python program to alternatively split 
# a linked list into two halves 
  
# Node class
class Node:    
    def __init__(self, data, 
                 next = None):        
        self.data = data
        self.next = None
  
class LinkedList:    
    def __init__(self):        
        self.head = None
      
    # Given the source list, split its nodes 
    # into two shorter lists. If we number the 
    # elements 0, 1, 2, ... then all the even 
    # elements should go in the first list, and 
    # all the odd elements in the second. The 
    # elements in the new lists may be in any order.
    def AlternatingSplit(self, a, b):        
        first = self.head
        second = first.next
          
        while (first is not None and 
               second is not None and 
               first.next is not None):
                
              # Move a node to list 'a'
              self.MoveNode(a, first) 
                
              # Move a node to list 'b'
              self.MoveNode(b, second) 
                
              first = first.next.next
                
              if first is None:
                break
                
              second = first.next
              
    # Pull off the front node of the 
    # source and put it in dest
    def MoveNode(self, dest, node):
          
        # Make the new node
        new_node = Node(node.data)
          
        if dest.head is None:
            dest.head = new_node
        else:
              
            # Link the old dest off the 
            # new node 
            new_node.next = dest.head
              
            # Move dest to point to the 
            # new node 
            dest.head = new_node
  
    # Utility Functions
    # Function to insert a node at  
    # the beginning of the linked list 
    def push(self, data):
          
        # 1 & 2 allocate the Node & 
        # put the data
          
        new_node = Node(data)
          
        # Make the next of new Node as head
        new_node.next = self.head
          
        # Move the head to point to 
        # new Node
        self.head = new_node
          
    # Function to print nodes in a given 
    # linked list 
    def printList(self):
          
        temp = self.head
        while temp:
            print temp.data,
            temp = temp.next
              
        print("")
  
# Driver Code
if __name__ == "__main__":
      
    # Start with empty list
    llist = LinkedList()
    a = LinkedList()
    b = LinkedList()
      
    # Created linked list will be
    # 0->1->2->3->4->5 
    llist.push(5)
    llist.push(4)
    llist.push(3)
    llist.push(2)
    llist.push(1)
    llist.push(0)
      
    llist.AlternatingSplit(a, b)
      
    print "Original Linked List: ",
    llist.printList()
      
    print "Resultant Linked List 'a' : ",
    a.printList()
      
    print "Resultant Linked List 'b' : ",
    b.printList()
      
# This code is contributed by kevalshah5

Producción:

Original linked List: 0 1 2 3 4 5 
Resultant Linked List 'a' : 4 2 0 
Resultant Linked List 'b' : 5 3 1

Complejidad de tiempo: O(n) donde n es un número de Nodes en la lista enlazada dada.
Consulte el artículo completo sobre la división alterna de una lista enlazada individual determinada | ¡ Establezca 1 para más detalles!

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *