私はこのプログラムがこのプログラムの新しいノードまたは "Player"構造体に値を挿入するのを、 。C++で、すべてを逆順で格納するのではなく、時系列で値を格納する単一リンクリストを作成しようとしています
これは機能main()内で起こります。私の教師は、本質的に「すべて」がそこにあり、私にそれを変えることができるので、できるだけ小さなコードを挿入するように私に要求します。ここで
は「のaddNew」内の古い値を入れながら、頭の中でそれぞれの新しい値を格納し、元のコードは次のとおりです。
Player * head = NULL;
for(int i=0; i<100; i++)
{
Player * addNew = (Player *)malloc(sizeof(Player));
if(head == NULL)
{
head->len = i;
Player * addNew = (Player *)malloc(sizeof(Player));
head->next = NULL;
}
addNew->next = addNew;
addNew->len = i;
}
Player * p = head;
//do this until 'p' has no address.
for(int i=0; p!=0; i++)
{
printf("%s ", p->str);
p = p->next;
}
誰もがこれを解決する方法上の任意のアイデアを持っていますか? 重要:私の先生は、新しい変数やテールを追加しないようにしたいと思います。お願いしないでください。
更新:ここにいくつかの古いコードです:
//The head is the last one to hold a value. Therefore it gets pushed to the right.
Player * head = NULL;
Original Algorithm
for(int i=0; i<5; i++)
{
Player * addNew = (Player *)malloc(sizeof(Player));
printf("Insert a string: ");
scanf("%s", addNew->str);
addNew->next = head; //assign head's current address to addNew->next
head = addNew; //assign all of addNew to head
}
アップデート:ここでは動作しません新しい実装です。私は本当に他のforループがどこに行くべきか正確には分かりません。
addNew->ID = 1;
addNew->ID += i;
if(head == NULL)
{
head = addNew;
addNew->next = head; //assign head's current address to addNew->next
//head->next = addNew;
}
//head->next = addNew;
addNew->next = head;
//head = addNew; //assign all of addNew to head
printf("%d\n", addNew->ID);
さて、テールを使用することはできません。他にどんな制限がありますか?そして、どのような要件?明白な解決策は、パフォーマンスの面で悲惨な、すべてのインサートのリストを歩くことです。 – EboMike
あなたの先生はあなたに問題を解決してもらいたいと思っています。ニース。また、それはC++ではなく、それらのmallocは恐ろしい漏れを求めています。あなたの先生があなたにCを学びたいと思ったように私に見えます。 – Puppy