Pesquisar neste blog

28/02/2018

Mesclar e centralizar uma lista vinculada em C++

//Programa C para mesclar uma lista vinculada em outro nas
//posições alternativas
#include <stdio.h>
#include <stdlib.h>
// Um nó da lista aninhada

struct Node{
    int data;
    struct Node *next;
};
/* Função para inserir um nó no início*/

void push(struct Node ** head_ref, int new_data){

    struct Node* new_node =

           (struct Node*) malloc(sizeof(struct Node));

    new_node->data  = new_data;

    new_node->next = (*head_ref);

    (*head_ref)  = new_node;

}
/* Função de utilitário para imprimir uma lista ligada individualmente */

void printList(struct Node *head)

{

    struct Node *temp = head;

    while (temp != NULL)

    {

        printf("%d ", temp->data);

        temp = temp->next;

    }
    printf("\n");
}

// Função principal que insere nós da lista vinculada q em p em

// posições alternativas. Como o chefe da primeira lista nunca muda

// e o cabeçalho da segunda lista pode mudar, precisamos de um único ponteiro

// para primeira lista e ponteiro duplo para a segunda lista.

void merge(struct Node *p, struct Node **q){

     struct Node *p_curr = p, *q_curr = *q;
     struct Node *p_next, *q_next;
     // Embora existam posições disponíveis em p

     while (p_curr != NULL && q_curr != NULL)

     {

         // Salve os ponteiros seguintes

         p_next = p_curr->next;

         q_next = q_curr->next;



         //

         q_curr->next = p_next;  // Alterar o próximo ponteiro de q_curr

         p_curr->next = q_curr;  // Alterar o próximo ponteiro de p_curr



         //Atualize as dicas atuais para a próxima iteração

         p_curr = p_next;

         q_curr = q_next;

    }
    *q = q_curr; //Atualize o ponteiro principal da segunda lista
}
//Programa de driver para testar funções acima

int main()

{

     struct Node *p = NULL, *q = NULL;

     push(&p, 3);

     push(&p, 2);

     push(&p, 1);

     printf("Primeira lista vinculada:\n");

     printList(p);



     push(&q, 8);

     push(&q, 7);

     push(&q, 6);

     push(&q, 5);

     push(&q, 4);

     printf("Segunda lista vinculada :\n");

     printList(q);


     merge(p, &q);


     printf("\nPrimeira lista alterada modificada :\n\n");

     printList(p);


     printf("\nSegunda lista vinculada modificada :\n");

     printList(q);


     getchar();

     return 0;

}

Nenhum comentário: