有头结点单链表逆置c语言
时间: 2023-09-29 16:03:07 浏览: 104
056 单链表就地逆置 C语言
5星 · 资源好评率100%
以下是用C语言实现有头结点单链表逆置的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct node {
int data;
struct node* next;
} Node;
// 创建链表
Node* createList(int n) {
Node* head = (Node*)malloc(sizeof(Node)); // 创建头结点
head->next = NULL;
Node* cur = head;
for (int i = 1; i <= n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = NULL;
cur->next = newNode;
cur = newNode;
}
return head;
}
// 遍历链表
void traverseList(Node* head) {
Node* cur = head->next;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
// 链表逆置
void reverseList(Node* head) {
Node* pre = head->next;
Node* cur = pre->next;
pre->next = NULL;
while (cur != NULL) {
Node* next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
head->next = pre;
}
int main() {
Node* head = createList(5);
printf("原链表:");
traverseList(head);
reverseList(head);
printf("逆置后的链表:");
traverseList(head);
return 0;
}
```
该代码中,首先定义了链表结构体 `Node`,包含数据域和指向下一个节点的指针。`createList` 函数用于创建有头结点的单链表,返回头结点指针。`traverseList` 函数用于遍历链表并打印每个节点的数据。`reverseList` 函数用于逆置链表。在 `main` 函数中,先创建一个有 5 个节点的链表并打印,然后调用 `reverseList` 函数逆置链表并再次打印。
阅读全文