リンク リストのマージ実装があります。Node* head
List 型の 2 つのパラメーターを受け取ります。これは、ポインターと a および a で構成される構造体をNode
含むクラスです。私が抱えている問題は、私の実装がノードを適切にリンクしていないか、単に間違っていることです。必要なことは、リスト 1 がリスト 2 とリスト 3 のノードの組み合わせになることです。ポインター操作でこれを行う必要があり、新しいメモリ割り当ては必要ないため、list2 と list3 が変更されます。これが私が今持っているものです:typename T data
Node* next
list1.merge(list2, list3);
template <typename T>
void List<T>::merge(List& list1, List& list2) {
typename List<T>::Node* list1Ptr = list1.head;
typename List<T>::Node* list2Ptr = list2.head;
for(;;) {
if (list1Ptr == NULL && list2Ptr != NULL) {
list1Ptr = list2Ptr->next;
head = list1.head;
break;
}
else if (list2Ptr == NULL && list1Ptr != NULL) {
list2Ptr = list1Ptr->next;
head = list1.head;
break;
}
else if (list1Ptr == NULL && list2Ptr == NULL) {
head = list1.head;
break;
}
else if (list1Ptr != NULL && list2Ptr != NULL) {
if (list1Ptr->data > list2Ptr->data){
typename List<T>::Node* temp;
temp = list2Ptr->next;
list1Ptr->next = list1Ptr;
list2Ptr = temp;
}
else if (list1Ptr->data < list2Ptr->data) {
typename List<T>::Node* temp;
temp = list1Ptr->next;
list1Ptr->next = list2Ptr;
list1Ptr = temp;
}
else if (list1Ptr->data == list2Ptr->data) {
list1Ptr = list1Ptr->next;
}
}
}
}
ノードに含まれるデータは、提供されたクラス型であり、必要なオーバーロードされた適切な演算子がすべて含まれています。main がスコープ外になり、残りの部分に対してデストラクタが呼び出されるまで、コード全体は問題なく実行されますDebug Assertion Failed Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
。
どうすればいいのか本当によくわかりません。何度も引き出してみましたが、すべてが理にかなっているように思えます。誰かが私を正しい方向に導くためのヒントを持っているなら、私はそれを大いに感謝します. 見てくれてありがとう!