用c语言以带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作编写程序实现单链表的逆置操作
时间: 2023-10-07 15:12:41 浏览: 120
以下是用C语言实现单链表逆置操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct LinkedList {
Node *head;
} LinkedList;
// 初始化单链表
void initLinkedList(LinkedList *list) {
list->head = (Node *)malloc(sizeof(Node));
list->head->next = NULL;
}
// 在单链表中查找值为value的结点
Node *searchNode(LinkedList *list, int value) {
Node *p = list->head->next;
while (p != NULL && p->data != value) {
p = p->next;
}
return p;
}
// 在单链表中插入值为value的结点
void insertNode(LinkedList *list, int value) {
Node *p = (Node *)malloc(sizeof(Node));
p->data = value;
p->next = list->head->next;
list->head->next = p;
}
// 在单链表中删除值为value的结点
void deleteNode(LinkedList *list, int value) {
Node *p = list->head->next;
Node *prev = list->head;
while (p != NULL && p->data != value) {
prev = p;
p = p->next;
}
if (p != NULL) {
prev->next = p->next;
free(p);
}
}
// 输出单链表中的所有结点
void printLinkedList(LinkedList *list) {
Node *p = list->head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 单链表逆置操作
void reverseLinkedList(LinkedList *list) {
Node *p = list->head->next;
list->head->next = NULL;
while (p != NULL) {
Node *next = p->next;
p->next = list->head->next;
list->head->next = p;
p = next;
}
}
// 撤销单链表
void destroyLinkedList(LinkedList *list) {
Node *p = list->head->next;
while (p != NULL) {
Node *next = p->next;
free(p);
p = next;
}
free(list->head);
}
int main() {
LinkedList list;
initLinkedList(&list);
insertNode(&list, 1);
insertNode(&list, 2);
insertNode(&list, 3);
insertNode(&list, 4);
insertNode(&list, 5);
printf("Original linked list: ");
printLinkedList(&list);
reverseLinkedList(&list);
printf("Reversed linked list: ");
printLinkedList(&list);
destroyLinkedList(&list);
return 0;
}
```
该程序中,我们首先通过 `initLinkedList` 函数初始化一个带头结点的单链表。然后,我们可以使用 `insertNode` 函数来在单链表中插入结点,使用 `searchNode` 函数来查找结点,使用 `deleteNode` 函数来删除结点,使用 `printLinkedList` 函数来输出单链表中的所有结点。最后,我们使用 `reverseLinkedList` 函数来逆置单链表,使得单链表中的结点顺序发生了改变。最后,我们使用 `destroyLinkedList` 函数来撤销单链表,释放内存。
阅读全文