我发现自己遇到了一个问题。如何在简单链表中将偶数复制为 2?我试图通过人工智能回答这个问题,但它没有给我想要的输出。有没有人可以告诉我如何解决这个问题?非常感谢,谢谢。
这是人工智能生成的代码。 duplicateEven 函数有什么问题?以及解决办法是什么?
#include <iostream>
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
void duplicateEvens(Node* head) {
Node* current = head;
while (current != nullptr) {
if (current->data % 2 == 0) {
Node* duplicate = new Node(2);
duplicate->next = current->next;
current->next = duplicate;
current = duplicate;
}
current = current->next;
}
}
void printList(Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
int main() {
Node* head = new Node(1);
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
head->next->next->next->next->next = new Node(6);
std::cout << "Original list: ";
printList(head);
duplicateEvens(head);
std::cout << "List after duplicating evens: ";
printList(head);
// Clean up memory
Node* current = head;
while (current != nullptr) {
Node* temp = current;
current = current->next;
delete temp;
}
return 0;
}
看起来你提示人工智能程序“...将偶数重复为2”,这有点含糊,也让我感到困惑。我自己一开始理解它的意思是“重复的偶数,就像2也是偶数一样”。 AI 将其解释为“重复偶数并将重复值设置为 2”。
但是您想要的是用 series 节点替换每个具有偶数值的节点,每个节点的值为 2,以便这些替换节点的总和是原始节点的值。我还假设您希望仅当偶数大于 0 时才会发生这种情况。
因此通过替换来修复代码:
if (current->data % 2 == 0) {
Node* duplicate = new Node(2);
duplicate->next = current->next;
current->next = duplicate;
current = duplicate;
}
与:
if (current->data % 2 == 0 && current->data > 0) {
int numExtraNodes = (current->data - 2) / 2;
current->data = 2;
for (int i = 0; i < numExtraNodes; i++) {
Node* duplicate = new Node(2);
duplicate->next = current->next;
current->next = duplicate;
current = duplicate;
}
}