0

重複の可能性:
ソートされた 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();
}
4

0 に答える 0