В следующем коде я пытаюсь объединить список 2 поочередно, а затем распечатать их в обратном порядке. Но мой код не дает правильного вывода, это просто объединение последнего элемента второго списка.
вход:
1
3
1 3 5
3
2 4 6
Фактический объем производства:
5 6 3 1
Ожидаемый результат:
5 6 3 4 1 2
Может кто-нибудь сказать, пожалуйста, в чем проблема в моем коде ....
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
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;
}
void printList(struct Node *head)
{
struct Node *temp = head;
while (temp != NULL)
{
cout<<temp->data<<' ';
temp = temp->next;
}
cout<<' ';
}
void mergeList(struct Node **head1, struct Node **head2);
int main()
{
int T;
cin>>T;
while(T--){
int n1, n2, tmp;
struct Node *a = NULL;
struct Node *b = NULL;
cin>>n1;
while(n1--){
cin>>tmp;
push(&a, tmp);
}
cin>>n2;
while(n2--){
cin>>tmp;
push(&b, tmp);
}
mergeList(&a, &b);
printList(a);
printList(b);
}
return 0;
}
void mergeList(struct Node **p, struct Node **q)
{
struct Node*temp1=*p,*temp2=*q,*t1,*t2;
while(temp1!=NULL)
{
if(temp2==NULL)
break;
t1=temp1->next;
t2=temp2;
temp1->next=t2;
t2->next=t1;
temp1=t1;
*q=temp2->next;
temp2=*q;
}
}