使用 _getch 创建链表并反转列表

Using _getch to create a linked list and reversing the list

本文关键字:列表 链表 getch 创建 使用      更新时间:2023-10-16

目前,我可以在链表中键入 9 个字符,然后打印它们。在我这样做之后,它应该给我与我键入的列表相反的顺序,但它只给我列表的最后一个字母,然后它退出。我知道我在底部的反向功能不正确,但我不确定如何处理它。任何帮助将不胜感激。

class Node
{
public:
char c;
Node *next;
Node *curr;
Node(char cc) { c = cc; next = nullptr; };
};

void main()
{
char c;
Node *start = nullptr;
Node *end = nullptr;
int i = 0;
cout << "Original Linked List:" << endl;
while (i++ <= 10)
{
c = _getch();
Node *p = new Node(c);
if (start == nullptr)
{
start = p;
end = start;
}
else
{
end->next = p;
end = p;
}
cout << c;
}
cout << endl;
cout << "Reversed Linked List:" << endl;
while (start != nullptr) {
Node *curr = new Node(c);
start = curr->next;
curr->next = end;
end = curr;
curr = start;
}
cout << c << endl;
system("pause");
}```

如果我很清楚你想做什么, 以下是一些基本的演示解决方案,遵循您的风格。 请注意我所做的更改,关于节点结构、迭代等。 另外值得一提的是,需要释放分配的节点。

#include <iostream>
#include <conio.h>
struct Node {
char c;
Node* next;
Node* prev;
Node(char cc):c(cc),next(nullptr),prev(nullptr) { };
};
using namespace std;
int main()
{
char c;
Node* start = nullptr;
Node* end = nullptr;
int i = 0;
cout << "Original Linked List:" << endl;
while (++i <= 10)
{
c = _getch();
Node* p = new Node(c);
if (start == nullptr)
{
start = p;
end = start;
p->next = end;
p->prev = start;
}
else
{
p->prev = end;
end = p;
p->next = end;
}
cout << c;
}
cout << endl;
cout << "Reversed Linked List:" << endl;
Node* curr = end;
while (start != curr) {
cout << curr->c;
start = curr->next;
curr = curr->prev;
}
cout << "n";
system("pause");
return 0;
}

输出为

原始链表:

1234567890

反向链表:

0987654321

按任意键继续 . . .