请用c语言完成Reversal 函数。函数功能:将单链表L 中所有元素就地逆置。
时间: 2024-09-27 18:12:54 浏览: 40
clean_信道冲激函数_验证输入卷积冲激函数得到输出_clean信号_clean_
5星 · 资源好评率100%
在 C 语言中,你可以通过遍历链表并交换节点的 next 指针来实现链表的逆置。下面是一个简单的示例,假设我们有一个结构体 `ListNode` 来表示链表节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 函数声明:逆置链表
void reverseList(ListNode** head);
// 创建新的链表节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
// 主函数展示链表逆置过程
int main() {
// 初始化链表示例
ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5); // 假设链表有更多元素
printf("Original List: ");
printList(head);
// 调用逆置函数
reverseList(&head);
printf("\nReversed List: ");
printList(head);
return 0;
}
// 实现链表逆置函数
void reverseList(ListNode** head) {
ListNode* prev = NULL;
ListNode* current = *head;
ListNode* nextTemp = NULL;
while (current != NULL) {
// 保存当前节点的下一个节点
nextTemp = current->next;
// 将当前节点的 next 指向 prev
current->next = prev;
// 更新 prev 和 current
prev = current;
current = nextTemp;
}
*head = prev; // 逆置后,新的头节点将是原尾部节点
}
```
在这个代码里,`reverseList` 函数通过临时变量 `nextTemp` 遍历链表,每次迭代都将当前节点的 next 指针指向前一个节点,直到遍历完整个链表。注意在主函数里,我们传递了指向 `head` 的指针给 `reverseList`,因为我们需要修改原始链表。
阅读全文