如何在C语言中实现链表倒转
时间: 2024-10-25 18:11:30 浏览: 17
在C语言中,链表倒转是一个常见的操作,可以通过迭代或递归的方式来实现。这里我将提供一种基于迭代的解决方案,因为递归在链表操作上可能会导致栈溢出,尤其是在处理长链表时。
假设我们有这样一个链表结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
以下是使用迭代法实现链表倒转的示例:
```c
Node* reverseList(Node* head) {
Node *prev = NULL, *current = head, *nextTemp;
while (current != NULL) {
// 保存当前节点的下一个节点
nextTemp = current->next;
// 将当前节点的next指向前一个节点
current->next = prev;
// 更新前一个节点和当前节点
prev = current;
current = nextTemp;
}
return prev; // 返回新的头节点(即原尾节点)
}
```
在这个函数中,我们遍历原始链表,每次都改变当前节点的`next`指向它的前一个节点,直到遍历完所有节点,最后返回新的头节点(即原链表的尾节点)。
要打印倒置后的链表,你可以再遍历一遍新的头节点:
```c
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 初始化链表并调用reverseList
Node* head = ...;
head = reverseList(head);
// 打印倒置后的链表
printList(head);
return 0;
}
```
阅读全文