重複の可能性:
ソートされた 2 つのリンク リストをマージする
ソートされた2つのリンクリストをポインタ操作で結合したくて、ここまでたどり着きました。これが最も効率的なプログラムであるかどうかを判断できません(メモリに関しても時間に関しても)。お願い助けて。効率的にしたいので、別のリストを作成したくありません。
たぶん、2 つのリンクリストにデータ値を入力する別の方法....そうかもしれません。:) 助けて。わかりません。
#include<iostream>
#include<conio.h>
using namespace std;
struct s
{
int info;
s *next;
};
int main()
{
int i;
char choice = 'y';
s *ptr1, *ptr2, *start1, *start2, *reversedHead, *temp;
ptr1= new s;
start1=ptr1;
cout<<"SIZE OF A NODE IS "<<sizeof(s)<<" BYTES"<<endl<<endl;
while(choice=='y')
{
cout<<"Enter info for node: ";
cin>>i;
ptr1->info = i;
cout<<"Do you wish to enter more nodes.? 'y'/'n'"<<endl;
cin>>choice;
if(choice=='y')
{
ptr1->next = new s;
ptr1 = ptr1->next;
}
else
{
ptr1->next = NULL;
}
}
choice = 'y';
ptr2= new s;
start2=ptr2;
cout<<"SIZE OF A NODE IS "<<sizeof(s)<<" BYTES"<<endl<<endl;
while(choice=='y')
{
cout<<"Enter info for node: ";
cin>>i;
ptr2->info = i;
cout<<"Do you wish to enter more nodes.? 'y'/'n'"<<endl;
cin>>choice;
if(choice=='y')
{
ptr2->next = new s;
ptr2 = ptr2->next;
}
else
{
ptr2->next = NULL;
}
}
if(start1->info<start2->info)
{
ptr1=start1;
ptr2=start2;
}
else
{
ptr1=start2;
ptr2=start1;
}
while(ptr1 != NULL && ptr2 != NULL)
{
if(ptr1->next==NULL)
{
ptr1->next=ptr2;
while(ptr2!=NULL)
ptr2=ptr2->next;
}
else if(ptr1->next->info >= ptr2->info)
{
temp=ptr2;
ptr2=ptr2->next;
temp->next=ptr1->next;
ptr1->next=temp;
}
else if(ptr1->next->info < ptr2->info)
ptr1=ptr1->next;
}
cout<<"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n";
if(start1->info>=start2->info)
{ ptr2=start2;
while(ptr2!=NULL){
cout<<ptr2->info<<"\t";
ptr2=ptr2->next;}
}
else
{
ptr1=start1;
while(ptr1!=NULL){
cout<<ptr1->info<<"\t";
ptr1=ptr1->next;}
}
getch();
}