Create merging linkedlist in alternate positions.cpp
parent
1cc547fd8b
commit
4b04d1b24f
|
@ -0,0 +1,92 @@
|
||||||
|
// C++ program to merge a linked list into another at
|
||||||
|
// alternate positions
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// A nexted list node
|
||||||
|
class Node
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int data;
|
||||||
|
Node *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Function to insert a node at the beginning */
|
||||||
|
void push(Node ** head_ref, int new_data)
|
||||||
|
{
|
||||||
|
Node* new_node = new Node();
|
||||||
|
new_node->data = new_data;
|
||||||
|
new_node->next = (*head_ref);
|
||||||
|
(*head_ref) = new_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utility function to print a singly linked list */
|
||||||
|
void printList(Node *head)
|
||||||
|
{
|
||||||
|
Node *temp = head;
|
||||||
|
while (temp != NULL)
|
||||||
|
{
|
||||||
|
cout<<temp->data<<" ";
|
||||||
|
temp = temp->next;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main function that inserts nodes of linked list q into p at
|
||||||
|
// alternate positions. Since head of first list never changes
|
||||||
|
// and head of second list may change, we need single pointer
|
||||||
|
// for first list and double pointer for second list.
|
||||||
|
void merge(Node *p, Node **q)
|
||||||
|
{
|
||||||
|
Node *p_curr = p, *q_curr = *q;
|
||||||
|
Node *p_next, *q_next;
|
||||||
|
|
||||||
|
// While there are available positions in p
|
||||||
|
while (p_curr != NULL && q_curr != NULL)
|
||||||
|
{
|
||||||
|
// Save next pointers
|
||||||
|
p_next = p_curr->next;
|
||||||
|
q_next = q_curr->next;
|
||||||
|
|
||||||
|
// Make q_curr as next of p_curr
|
||||||
|
q_curr->next = p_next; // Change next pointer of q_curr
|
||||||
|
p_curr->next = q_curr; // Change next pointer of p_curr
|
||||||
|
|
||||||
|
// Update current pointers for next iteration
|
||||||
|
p_curr = p_next;
|
||||||
|
q_curr = q_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
*q = q_curr; // Update head pointer of second list
|
||||||
|
}
|
||||||
|
|
||||||
|
// Driver code
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Node *p = NULL, *q = NULL;
|
||||||
|
push(&p, 3);
|
||||||
|
push(&p, 2);
|
||||||
|
push(&p, 1);
|
||||||
|
cout<<"First Linked List:\n";
|
||||||
|
printList(p);
|
||||||
|
|
||||||
|
push(&q, 8);
|
||||||
|
push(&q, 7);
|
||||||
|
push(&q, 6);
|
||||||
|
push(&q, 5);
|
||||||
|
push(&q, 4);
|
||||||
|
cout<<"Second Linked List:\n";
|
||||||
|
printList(q);
|
||||||
|
|
||||||
|
merge(p, &q);
|
||||||
|
|
||||||
|
cout<<"Modified First Linked List:\n";
|
||||||
|
printList(p);
|
||||||
|
|
||||||
|
cout<<"Modified Second Linked List:\n";
|
||||||
|
printList(q);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This code is contributed by rathbhupendra
|
Loading…
Reference in New Issue