我无法在简单链接列表中复制偶数[已关闭]

问题描述 投票:0回答:1

我发现自己遇到了一个问题。如何在简单链表中将偶数复制为 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;
}

c++ data-structures linked-list
1个回答
1
投票

看起来你提示人工智能程序“...将偶数重复为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;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.