单循环链表反转函数c语言
时间: 2024-11-24 12:27:39 浏览: 42
单循环链表反转是指将链表中的元素顺序改变,使其从原来的头节点开始变为原来的尾节点作为新的头。在C语言中,你可以通过三个指针来实现这个过程,通常命名为prev、current和next。下面是一个简单的C语言函数来反转单循环链表:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* reverseSingleLinkedList(Node* head) {
if (head == NULL || head->next == head) { // 如果链表为空或只有一个节点,无需反转
return head;
}
Node* prev = NULL; // 初始化前驱节点为NULL
Node* current = head; // 初始化当前节点为头节点
while (current != NULL) {
Node* nextTemp = current->next; // 临时保存下一个节点
current->next = prev; // 将当前节点的next指向prev
prev = current; // 更新prev为当前节点
current = nextTemp; // 将当前节点更新为原下一个节点
}
return prev; // 返回新头节点,即原尾节点
}
// 测试函数
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
int main() {
Node* list = createList(); // 假设createList()函数创建了一个单循环链表
printf("Original List: ");
printList(list);
list = reverseSingleLinkedList(list);
printf("\nReversed List: ");
printList(list);
return 0;
}
```
在这个函数中,我们首先检查链表是否为空或只有一个节点。然后,遍历链表,每次迭代都把当前节点的`next`指向前一个节点,直到遍历完整个链表。
阅读全文