【问题描述】编写程序,将线性表元素序列逆置。要求线性表采用单链表存储结构,元素为int型。从键盘输入线性表元素,创建单链表,输入0结束,对线性表序列进行逆置,输出逆置前和逆置后的序列。
时间: 2024-10-11 11:12:35 浏览: 31
线性表的顺序表示(2).zip
在C++中,你可以通过以下几个步骤编写一个简单的程序来实现这个功能:
1. 首先,你需要定义一个Node结构体作为单链表的节点,包含一个整数值和指向下一个节点的指针。
```cpp
struct Node {
int data;
Node* next;
};
```
2. 创建一个函数来插入新的元素到链表的末尾,并保持链表的顺序。
```cpp
void insert(Node** head, int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
if (*head == nullptr) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
```
3. 编写一个函数用于链表的逆置,这通常涉及到三个指针,一个用于当前节点,一个用于前一个节点,另一个用于后续节点。
```cpp
void reverseList(Node** head) {
Node* prev = nullptr, *curr = *head, *next = nullptr;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
*head = prev;
}
```
4. 主函数中获取用户输入并调用上述函数,然后分别打印逆置前和逆置后的链表。
```cpp
int main() {
Node* head = nullptr;
int input;
std::cout << "请输入链表元素(输入0结束):" << std::endl;
while (std::cin >> input && input != 0) {
insert(&head, input);
}
std::cout << "原链表序列:";
printList(head);
reverseList(&head);
std::cout << "逆置后的链表序列:";
printList(head);
return 0;
}
// 辅助函数:打印链表
void printList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " ";
node = node->next;
}
std::cout << "\n";
}
```
当运行这个程序时,它会提示用户输入链表元素,结束后会显示原始链表和逆置后的链表。
阅读全文