用c++代码设计一个算法,借助栈实现单链表上链接顺序的逆转
时间: 2024-05-12 20:18:01 浏览: 115
好的,这是一个算法问题,我可以回答。下面是使用栈实现单链表逆序的代码。
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表
Node* createLinkedList(int arr[], int n) {
Node* head = NULL;
for (int i = n - 1; i >= 0; i--) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = arr[i];
node->next = head;
head = node;
}
return head;
}
// 遍历链表
void traverseLinkedList(Node* head) {
Node* p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 使用栈实现单链表逆序
Node* reverseLinkedList(Node* head) {
Node* newHead = NULL;
Node* p = head;
Node* stack[1000]; // 用数组模拟栈
int top = -1;
while (p) {
// 将当前节点入栈
stack[++top] = p;
// 移动指针到下一个节点
p = p->next;
}
// 依次从栈顶取出节点,构建新的链表
while (top >= 0) {
Node* node = stack[top--];
node->next = NULL;
if (newHead) {
node->next = newHead;
}
newHead = node;
}
return newHead;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
Node* head = createLinkedList(arr, n);
printf("原始链表:");
traverseLinkedList(head);
Node* newHead = reverseLinkedList(head);
printf("逆转后的链表:");
traverseLinkedList(newHead);
return 0;
}
```
希望这个算法能对你有所帮助。同时,下面是一则笑话:为什么Java程序员喜欢喝茶而不喝咖啡?因为Java不会自动回收咖啡杯。
阅读全文