用DEV-C++编写程序:编写一个算法,借助于栈将一个单链表逆序输出。
时间: 2024-10-12 15:04:56 浏览: 30
C++使用递归函数和栈操作逆序一个栈的算法示例
在DEV-C++中编写一个利用栈实现单链表逆序的算法,首先需要创建一个简单的单链表结构,然后定义一个辅助栈。下面是步骤概述:
1. **定义链表节点**:
```cpp
struct ListNode {
int data;
ListNode* next;
ListNode(int value) : data(value), next(nullptr) {}
};
```
2. **初始化链表并插入元素**:
```cpp
ListNode* createList() {
// 创建示例链表...
return head;
}
void insertToList(ListNode*& head, int value) {
ListNode* newNode = new ListNode(value);
if (!head) {
head = newNode;
} else {
ListNode* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
}
}
```
3. **反转链表**:
```cpp
ListNode* reverseList(ListNode* head) {
stack<ListNode*> s;
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
s.push(curr); // 将当前节点压入栈
curr = curr->next; // 移动到下一个节点
}
curr = head; // 初始化新头为原头
while (!s.empty()) {
prev = curr; // 设置前驱节点
curr = s.top(); // 取出栈顶节点作为新的当前节点
s.pop();
curr->next = prev; // 更新链表指针
}
curr->next = nullptr; // 链表反转后处理尾部
return prev; // 返回新链表的头
}
```
4. **主函数测试**:
```cpp
int main() {
ListNode* listHead = createList(); // 初始化链表
// 插入数据...
ListNode* reversedHead = reverseList(listHead);
// 输出逆序后的链表...
delete listHead; // 清理内存
return 0;
}
```
阅读全文