2 年生のプログラミング クラスで、病院と病院の医師と患者を表す二重リンク リストのセットを作成するという問題があります。病院には医師のリストがあり、各医師には患者のリストがあります。私の問題は、「hireDoctor」関数を呼び出して医師を病院のリストに追加すると、どういうわけかヘッドポインターが変更されることです。ここに私のコードがあります:
/* adds a Doctor to the Hospital's list of Doctors */
void Hospital::hireDoctor(Doctor *doc)
{
DoctorNode node;
node.value = *doc;
DoctorNode* curr;
if (drListHead == NULL) { //if doctor list is empty,
drListHead = &node; //insert the node at the beginning
node.next = NULL;
node.prev = NULL;
} else {
curr = drListHead;
//traverse list until equal or greater (alphabetical) value is found:
while (curr->value.getLast().compare(node.value.getLast()) < 0 &&
curr->value.getFirst().compare(node.value.getFirst()) < 0) {
curr = curr->next;
}
if (curr->prev == NULL) { //if inserting at the beginning of the list
drListHead = &node;
node.prev = NULL;
node.next = curr;
} else if (curr->next == NULL) { //if the end of the list has been reached
curr->next = &node;
node.prev = curr;
node.next = NULL;
} else { //insert the new DoctorNode in the middle:
curr->next->prev = &node;
node.next = curr->next;
curr->next = &node;
node.prev = curr;
}
}
リスト内の各ノードは構造体として定義されます。
struct DoctorNode {
Doctor value;
DoctorNode *next;
DoctorNode *prev;
}
したがって、hireDoctor 関数を一度使用した後、John Smith という名前の医師を「雇う」と、drListHead が John Smith を指していると予想されます。しかし、2 回目に Jane Doe を雇ってこの関数を使用すると、drListHead は関数に入った時点で既にJane Doe を指しているように見えます。どこが変更されているのかわかりません。どんな考えでも大歓迎です!