如何解决写入反向链表的函数并没有完全给出正确的输出
我有一个 DS 作业,我们应该编写一个程序来接受链表,反转它们并将它们打印出来。
现在功能本身我想我是对的。但是程序必须以某种方式输出才能正确评分,这就是我正在努力的地方。
当然这是代码(抱歉,我想完全确定它有点长。重点是 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 举报,一经查实,本站将立刻删除。