C++에서 단독으로 링크 된 목록을 만들려고합니다. 나는 "DiseaseList"구조를 기반으로 항목을 생성하고 목록에 해당 항목을 추가 한 다음 인쇄하는 3 가지 기능으로이 작업을 수행하고 있습니다.링크드리스트의 머리 부분이 목록의 마지막 항목으로 계속됩니다.
저는이 코드를 말 그대로 몇 시간 빗어 봤는데이 목록의 머리를 마지막 항목에 배치하는 것을 막을 수 없습니다. 머리가 바뀔 수있는 지점은 2 개뿐입니다 (머리 = *). 그러나 나는 그것을 이해할 수 없기 때문에 내가 쓰고있는 것의 오해 일뿐입니다.
예를 들어 두 개의 새로운 요소 인 "1"& "2"를 추가합니다. 루프에서 영원히 "2"를 출력합니다. 컴파일러는 보이지 않았다 나의 고통 :(
#include <iostream>
using namespace std;
typedef struct DiseaseList
{
int a;
struct DiseaseList *Next;
}DList; //Not sure if I needed DList here or should have just used DiseaseList
DList* CreateElement();
void printList(DList*);
DList* AddElement(DList*, DList*);
int main(void)
{
int choose;
DList *Head = NULL, *NewElement;
do {
cout << "1. Add element" << endl;
cout << "2. Print list" << endl;
cout << "3. Exit" << endl;
cin >> choose;
switch (choose)
{
case 1:
NewElement = CreateElement();
Head = AddElement(Head, NewElement);
break;
case 2: printList(Head); break;
case 3: return 0;
}
} while (1);
}
DList* CreateElement() //Creates a new item for the list
{
DList* temp;
cout << "New Number:";
cin >> temp->a;
temp->Next = NULL;
return temp;
}
DList* AddElement(DList *Head, DList *NewElement) //Adds new item from CreateElement to the list
{
if (Head == NULL)
{
NewElement->Next = NULL;
Head = NewElement;
}
else{
DList *temp = Head;
while (temp->Next != NULL)
{
temp = temp->Next;
}
temp->Next = NewElement;
}
return Head;
}
void printList(DList* Head)
{
while (Head != NULL)
{
cout << Head->a << endl;
Head = Head->Next;
}
}
괜찮은 디버거를 사용하여 한 줄씩 코드를 단계별로 실행할 때 실제로 어떤 비정상적인 현상이 발생 했습니까? 당신의 서명을 전달하는'Head'는 다음과 같이 보이면 안됩니다 :'DList * AddElement (DList * &, DList *);'? –