我有一个链接列表的合并实现。它接受两个 List 类型的参数,这是一个包含Node* head
指针和Node
由 atypename T data
和 a组成的结构的类Node* next
。我遇到的问题是我的实现没有按应有的方式链接节点,或者我只是做错了。它需要做的是,如果你这样做了,list1.merge(list2, list3);
那么list1将成为list2和list3的节点的组合。我需要通过指针操作和没有新的内存分配来做到这一点,所以 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)
.
我真的不知道该怎么做,我已经画了很多次,这对我来说似乎很有意义。如果有人有任何提示可以让我朝着正确的方向前进,我将不胜感激。感谢大家观看!