请用C语言实现反向reverse一个单向链表编程
时间: 2024-02-24 21:55:26 浏览: 72
以下是C语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL;
struct ListNode *curr = head;
while (curr) {
struct ListNode *next_node = curr->next;
curr->next = prev;
prev = curr;
curr = next_node;
}
return prev;
}
int main() {
// 创建链表:1 -> 2 -> 3 -> 4 -> 5
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 1;
head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->val = 2;
head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->next->val = 3;
head->next->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->next->next->val = 4;
head->next->next->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->next->next->next->val = 5;
head->next->next->next->next->next = NULL;
// 反向链表
struct ListNode *new_head = reverseList(head);
// 打印链表
while (new_head) {
printf("%d ", new_head->val);
new_head = new_head->next;
}
return 0;
}
```
在这个实现中,我们定义了一个结构体`ListNode`表示单向链表的节点,其中包含一个整型变量`val`表示节点的值,和一个指向下一个节点的指针`next`。`reverseList`函数接受一个头节点`head`,返回反转后的头节点。具体实现过程和Python版本一样,我们定义两个指针`prev`和`curr`,从头节点开始遍历链表,每次迭代将当前节点的`next`指针指向上一个节点`prev`,然后将`prev`指针指向当前节点,将`curr`指针指向下一个节点。遍历结束后,`prev`指针指向反转后的头节点,我们返回它即可。
阅读全文