借助栈(可用栈的基本运算)来实现单链表的逆置运算。用c语言编写
时间: 2023-06-11 08:05:40 浏览: 103
好的,我会为您回答这个问题。以下是实现单链表逆置的代码,使用栈作为辅助结构。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} Node;
void reverse(Node** head) {
if (*head == NULL) return; // 空链表直接返回
Node* stack = NULL;
Node* p = *head;
// 把链表元素依次压入栈中
while (p != NULL) {
Node* tmp = p;
p = p->next;
tmp->next = stack;
stack = tmp;
}
// 把栈中元素依次出栈,构造新的链表
*head = stack;
p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = NULL;
}
int main() {
// 测试代码
Node* head = NULL;
for (int i = 1; i <= 5; i++) {
Node* p = (Node*)malloc(sizeof(Node));
p->data = i;
p->next = head;
head = p;
}
printf("原链表:");
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
reverse(&head);
printf("逆置后的链表:");
p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
我已经为您提供了完整代码,您可以直接复制并运行它。可以看到,这个程序使用了栈作为辅助结构,依次把链表元素压入栈中,然后再依次出栈,构造新的链表。这样就完成了单链表的逆置运算。
阅读全文