したがって、ユーザーが2つのリンクリストを整数で埋めるプログラムを作成しています。重複のないリスト。両方のリストに入力要素とは、それらを見ることができ、ユーザだから今2つの単一リンクリストをマージして3つ目のリストを作成する関数
#include <iostream>
#include <stdlib.h>
using namespace std;
struct node
{
int info;
node *next;
node (int i, node *n=NULL)
{
info = i;
next = n;
}
~node()
{
cout <<"NODE CONTAINING \"" << info << "\" WAS DELETED!" << endl;
}
};
struct list
{
node* startList1, *lastList1, *startList2, *lastList2;
int menuOption;
int nodeCount1=0, nodeCount2=0;
list() {
startList1 = NULL;
startList2 = NULL;
}
void addList1(node *p)
{
int n;
cout << "PLEASE INPUT VALUE WHICH YOU WANT IN THE NODE:";
cin >> n;
p = new node(n);
nodeCount1++;
if(startList1==NULL)
{
startList1 = lastList1 = p;
}
else
{
lastList1->next = p;
lastList1 = p;
}
}
void printList1(node *pr)
{
node *pr;
for (pr=startList1; pr!=NULL; pr=pr->next)
{
cout << pr->info << endl;
}
}
void addList2(node *q)
{
int n;
cout << "PLEASE INPUT VALUE WHICH YOU WANT IN THE NODE:";
cin >> n;
q = new node(n);
nodeCount2++;
if(startList2==NULL)
{
startList2 = lastList2 = q;
}
else
{
lastList2->next = q;
lastList2 = q;
}
}
void printList2(node *pr)
{
for (pr=startList2; pr!=NULL; pr=pr->next)
{
cout << pr->info << endl;
}
}
// this just prints first and second lists to show what is inside..
void printBoth(node *pr, node *qr)
{
cout << "Elements of the first list:" << endl;
for (pr=startList1; pr!=NULL; pr=pr->next)
{
cout << pr->info << endl;
}
cout << "Elements of the second list:" << endl;
for (pr=startList2; pr!=NULL; pr=pr->next)
{
cout << pr->info << endl;
}
}
void printMenu()
{
cout << "MENU" << endl;
cout << "(1) ADD ELEMENT LIST1." << endl;
cout << "(2) PRINT LIST1" << endl;
cout << "(3) ADD ELEMENT LIST2" << endl;
cout << "(4) PRINT LIST2" << endl;
cout << "(5) PRINT BOTH LISTS" << endl;
cout << "(6) USE MERGE FUNCTION" << endl;
cout << "(7) TO EXIT" << endl;
cin >> menuOption;
system ("cls");
};
void dragons()
{
node *temp1 = startList1;
node *temp2 = startList2;
while(temp1)
{
temp1 = startList1->next;
delete startList1;
startList1=temp1;
}
while(temp2)
{
temp2 = startList2->next;
delete startList2;
startList2=temp2;
}
};
};
int main()
{
struct node *p = NULL, *q = NULL;
list s;
s.printMenu();
node* list1;
node* list2;
node* sorting;
while(s.menuOption!=7)
{
switch (s.menuOption)
{
case 1: s.addList1(list1);
break;
case 2: s.printList1(list1);
break;
case 3: s.addList2(list2);
break;
case 4: s.printList2(list2);
break;
case 5:s.printBoth(list1, list2);
break;
case 6:s.merge();
break;
default: cout << "SOMETHING WENT WRONG!!!!" << endl;
break;
}
system ("pause");
system ("cls");
s.printMenu();
}
s.dragons();
return 0;
}
が、どのようにiは、重複した値なしでこれらのリストをマージする関数を作成することができます:ここで は私が今持っているコードですか?例えば、 List1 = 1,2,3,6,8; List2 = 2,4,5,7,8;
結合リスト= 1,2,3,4,5,7,8; (実際に注文しても問題ありません)
アドバイスありがとうございます!ありがとう!
リンクリストからデータを取得できない場合はどうすればよいでしょうか?あなたの 'struct list'には、' main'から追加されたデータを取得する方法や、 'main'から最初から最後まで繰り返すことができないことに注意してください。これは 'merge()'が正しく動作するようにするための第一歩です。 – PaulMcKenzie
申し訳ありませんが、私はC++言語の新人です。あなたは何を話しているのかよく分かりません。 「メインからデータを追加したり、メインから開始して終了するまで繰り返しできるようにするにはどうすればよいですか? –
リンクリストクラスを構築しました。リスト構造体の外側からそれらのリストのデータを読み取る方法はありません。次に、 'addList1'と' addList2'関数は、渡されたパラメータを変更しません。初期化されていないポインタを 'addList1'と' addList2'に送りますが、それらの関数が返っても初期化されません。証明が必要な場合は、 'add ...()'関数を呼び出す前に 'list1'と' list2'を 'nullptr'に設定してください。これらの関数が呼び出された後もまだ 'nullptr'であることがわかります。つまり、 'list1'と' list2'を使用するたびに 'main'全体にバグがあります。 – PaulMcKenzie