c语言结构设计 设计一个算法对单链表实现就地逆置。
时间: 2024-12-10 12:55:53 浏览: 15
单链表就地逆置的方法
要设计一个C语言算法对单链表实现就地逆置,可以使用迭代的方式,通过三个指针(prev、current和next)来遍历并更新节点的链接。这里给出一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 就地逆置链表函数
void reverseList(Node** head) {
Node* prev = NULL; // 初始化prev为空
Node* current = *head; // 初始化current为头节点
while (current != NULL) { // 当current不为NULL时,继续循环
Node* nextTemp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 更新当前节点指向prev
prev = current; // prev前进一位
current = nextTemp; // current前进一位
}
*head = prev; // 最后,头节点变成原链表的尾节点
}
// 打印链表辅助函数
void printList(Node* head) {
while (head != NULL) {
printf("%d ->", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
Node* head = (Node*)malloc(sizeof(Node));
head->data = 1;
head->next = (Node*)malloc(sizeof(Node));
head->next->data = 2;
head->next->next = (Node*)malloc(sizeof(Node));
head->next->next->data = 3;
head->next->next->next = NULL;
printf("Original List: ");
printList(head);
reverseList(&head); // 调用逆置函数
printf("\nReversed List: ");
printList(head);
return 0;
}
```
这段代码首先定义了一个链表节点结构,接着实现了`reverseList`函数,它接受链表的头指针作为参数。函数内部通过改变节点之间的链接,实现了链表的就地逆置。最后,在`main`函数中创建了一个示例链表,调用逆置函数并打印逆转后的链表。
阅读全文