请用C语言设计一个简单的算法,实现单链表反转
时间: 2023-12-30 07:02:36 浏览: 99
算法-单链表遍历及反转(java)(csdn)————程序.pdf
好的,以下是用 C 语言实现单链表反转的算法:
```c
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *pre = NULL, *cur = head, *next = head ? head->next : NULL;
while (cur) {
cur->next = pre;
pre = cur;
cur = next;
next = next ? next->next : NULL;
}
return pre;
}
```
其中,结构体 ListNode 表示单链表的节点,包含一个整型变量 val 和一个指向下一个节点的指针 next。
算法的实现与上面的 C++ 代码类似,使用三个指针 pre、cur、next 遍历链表,并将 cur 的 next 指针指向 pre,然后依次向后移动 pre、cur、next 指针,直到 cur 指向 NULL。最后返回 pre,即为反转后的链表头节点。
这个算法的时间复杂度为 O(n),空间复杂度为 O(1),其中 n 为链表的长度。
阅读全文