微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写入反向链表的函数并没有完全给出正确的输出

如何解决写入反向链表的函数并没有完全给出正确的输出


我有一个 DS 作业,我们应该编写一个程序来接受链表,反转它们并将它们打印出来。 现在功能本身我想我是对的。但是程序必须以某种方式输出才能正确评分,这就是我正在努力的地方。

演示: 这是示例输入和示例输出的样子
link

这是我的输出结果
link

当然这是代码(抱歉,我想完全确定它有点长。重点是 ReversePrinter() )

#include <bits/stdc++.h>

using namespace std;

class SinglyLinkedListNode {

    public:

        int data;

        SinglyLinkedListNode *next;

        SinglyLinkedListNode(int node_data) {

            this->data = node_data;

            this->next = nullptr;

        }

};

class SinglyLinkedList {

    public:

        SinglyLinkedListNode *head;

        SinglyLinkedListNode *tail;

        SinglyLinkedList() {

            this->head = nullptr;

            this->tail = nullptr;

        }

        void insert_node(int node_data) {

            SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data);

            if (!this->head) {

                this->head = node;

            } else {

                this->tail->next = node;

            }

            this->tail = node;

        }

};

void print_singly_linked_list(SinglyLinkedListNode* node,string sep)
{

    while (node) {

        cout << node->data;

        node = node->next;

        if (node) {

            cout << sep;

        }

    }

}

void free_singly_linked_list(SinglyLinkedListNode* node) {

    while (node) {

        SinglyLinkedListNode* temp = node;

        node = node->next;

        free(temp);

    }

}

// Complete the reversePrint function below.

/*

 \* For your reference:

 \*

 \* SinglyLinkedListNode {

 \*     int data;

 \*     SinglyLinkedListNode* next;

 \* };

 \*

 \*/

void reversePrint(SinglyLinkedListNode* head) {

    SinglyLinkedListNode* prev = NULL;

    while(head != NULL)
    {
        SinglyLinkedListNode* next_node = head->next;
        head->next = prev;
        prev = head;
        head = next_node;
    }

    print_singly_linked_list(prev,"\n");


}

int main()

{

    int tests;

    cin >> tests;

    cin.ignore(numeric_limits<streamsize>::max(),'\n');

    for (int tests_itr = 0; tests_itr < tests; tests_itr++) {

        SinglyLinkedList* llist = new SinglyLinkedList();

        int llist_count;

        cin >> llist_count;

        cin.ignore(numeric_limits<streamsize>::max(),'\n');

        for (int i = 0; i < llist_count; i++) {

            int llist_item;

            cin >> llist_item;

            cin.ignore(numeric_limits<streamsize>::max(),'\n');

            llist->insert_node(llist_item);

        }

        reversePrint(llist->head);

    }

    return 0;

}

我觉得有一些非常简单的事情我没有做对,但仍然:)

解决方法

如果你想在所有的输入之后输出所有的内容,你应该存储所有创建的列表,然后打印它们。

我还发现了一点:在最后一个元素之后没有从 reversePrint() 打印换行符,因此您必须在执行后添加一个。

可以这样做:

int main()
{
    int tests;
    cin >> tests;
    cin.ignore(numeric_limits<streamsize>::max(),'\n');

    // allocate an array to store lists
    SinglyLinkedList** llists = new SingleyLinkedList*[tests];

    for (int tests_itr = 0; tests_itr < tests; tests_itr++) {
        SinglyLinkedList* llist = new SinglyLinkedList();

        // create list (omit: do just as original code)

        // store created list
        llists[tests_itr] = llist;
        // instead of this
        // reversePrint(llist->head);
    }

    // print created lists
    for (int tests_itr = 0; tests_itr < tests; tests_itr++) {
        // print a list
        reversePrint(llists[tests_itr]->head);
        // print a newline
        cout << '\n';
    }

    // free the array
    delete[] llists;

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。