我调用一个interleave
看起来像的函数
void AddressLinkedList::interleave(AddressLinkedList& other) {
AddressLinkedList temp;
AddressListNode* thisCur = this->head;
AddressListNode* otherCur = other.head;
for (int i = 0; i < this->length + other.length; i++) {
if (i % 2 == 0) {
temp.insertEnd(thisCur->data);
thisCur = thisCur->next;
}
else if (i % 2 != 0) {
temp.insertEnd(otherCur->data);
otherCur = otherCur->next;
}
}
return;
}
这个函数应该将单链表 A 与单链表 B 交织在一起,如果 A 看起来像“1、2、3”而 B 看起来像“4、5、6”,那么调用linkedListA.interleave(linkedListB)
应该使 A “1、4、2、5、3、6”。我已经成功地创建了一个这样的列表,问题在于它是temp
列表,但我不知道如何制作它,所以它this
的最终目标linkedListA
是前面提到的“单链表 A”的指针. 如果它很重要,下面是重载的赋值运算符和insertEnd
函数。
void AddressLinkedList::insertEnd(const Address& value) {
if (length == 0) {
this->insertStart(value);
return;
}
AddressListNode* temp = new AddressListNode(value);
length++;
tail->next = temp;
tail = temp;
}
AddressLinkedList& AddressLinkedList::operator=(const AddressLinkedList& other) {
delete this;
AddressListNode* current;
current = other.head;
while (current != nullptr) {
insertEnd(current->data);
current = current->next;
}
return *this;
}