数据结构c语言将带头结点的单链表l逆置
时间: 2024-09-26 18:05:30 浏览: 7
在 C 语言中,将一个带头节点的单链表逆转,即改变每个节点的前驱指向,可以通过迭代或递归的方式实现。这里提供一个使用迭代方法的例子:
首先,我们需要定义链表节点结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,编写一个函数来逆置链表:
```c
Node* reverseList(Node* head) {
Node *prev = NULL, *current = head, *next = NULL;
// 当链表非空时,循环进行
while (current != NULL) {
// 保存当前节点的下一个节点
next = current->next;
// 将当前节点的next指向前一个节点
current->next = prev;
// 更新前一个节点、当前节点
prev = current;
current = next;
}
// 返回新头节点,即原链表的尾部
return prev;
}
```
在这个函数里,我们使用了三个指针,`prev` 指向当前节点的前一个节点,`current` 初始指向头节点,`next` 存储当前节点的下一个节点。每一步,我们都更新 `current->next` 指向 `prev`,然后移动指针向前。
下面是完整代码的一个简单测试:
```c
int main() {
Node* head = createLinkedList(); // 创建一个链表
// ...(假设createLinkedList函数已定义)
Node* reversedHead = reverseList(head);
// 打印反转后的链表
printList(reversedHead); // 假设printList函数已定义
return 0;
}
```