c语言将一个带头结点的数据域依次为 a1,a2,…,an( n≥3)的单链表的所有结点逆置,即第一个 结点的数据域变为 an,…,最后一个结点的数据域为 a1。编程实现以上功能要求。
时间: 2024-02-16 12:02:40 浏览: 73
以下是C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void reverseList(Node *head) {
Node *p, *q;
p = head->next;
head->next = NULL;
while (p != NULL) {
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}
}
int main() {
int n, i, x;
Node *head, *p, *q;
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
p = head;
printf("请输入节点数n:");
scanf("%d", &n);
printf("请输入%d个节点的值:", n);
for (i = 0; i < n; i++) {
q = (Node*)malloc(sizeof(Node));
scanf("%d", &x);
q->data = x;
p->next = q;
p = q;
}
printf("原链表为:");
printList(head);
reverseList(head);
printf("逆置后链表为:");
printList(head);
return 0;
}
```
在这个程序中,定义了一个Node结构体表示链表的一个节点,其中包含数据域data和指向下一个节点的指针next。程序中使用头结点来方便操作链表,头结点的data值可以为空。reverseList函数实现了链表逆置操作,使用p和q指针来遍历链表并逆置。printList函数用于打印链表,方便查看结果。在main函数中,首先创建一个头结点,输入n个节点的值,并将节点插入链表中。最后调用reverseList函数逆置链表,并打印结果。
阅读全文