c语言:数据结构与算法 写一算法,借助于栈将一个存放你的学号202300705059的单链表逆序输出。
时间: 2024-10-12 13:04:25 浏览: 37
C语言实现单链表逆序与逆序输出实例
在C语言中,我们可以使用栈的数据结构来逆序一个单链表。以下是递归和非递归两种常见的方法:
**非递归方法(迭代法):**
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点函数
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 将链表节点入栈
void pushToStack(Node* head, Stack* stack) {
if (head != NULL) {
stack->top = push(stack->top, head);
head = head->next;
}
}
// 从栈中弹出并返回链表节点
Node* popFromStack(Stack* stack) {
if (stack->top == NULL)
return NULL;
Node* temp = stack->top->data;
stack->top = stack->top->next;
free(temp); // 释放内存
return stack->top;
}
// 主函数,逆序链表
void reverseList(Node* head) {
Stack stack;
stack.top = NULL;
pushToStack(head, &stack);
while (!isEmpty(&stack)) {
Node* temp = popFromStack(&stack);
printNode(temp); // 打印节点
temp->next = head; // 将节点指向原头节点
head = temp;
}
}
// 打印节点
void printNode(Node* node) {
if (node == NULL)
return;
printf("%d ", node->data);
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == NULL;
}
// 向栈顶添加元素
void* push(void* top, void* item) {
((Stack*)top)->top = (struct Node*)item;
((Stack*)top)->size++;
return top;
}
// 简化栈结构
typedef struct {
void* top;
int size;
} Stack;
int main() {
Node* listHead = createNode(202300705059);
// ... 连接其他节点 ...
printf("Original List: ");
printNode(listHead); // 输出原始链表
reverseList(listHead);
printf("\nReversed List: ");
printNode(listHead); // 输出逆序后的链表
return 0;
}
```
**相关问题--:**
1. 非递归方法如何利用栈逆序链表?
2. 递归方法实现链表逆序需要怎样的思路?
3. 在这个过程中,为什么要用到`printNode`函数?
阅读全文