c语言编程:单链表逆转,L是给定的单链表
时间: 2024-10-07 11:03:09 浏览: 39
在C语言中,单链表逆转是一个常见的经典问题,通常通过迭代或者递归的方式实现。这里我们提供一种使用迭代的方法:
首先,我们需要定义链表节点结构体:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
然后我们可以编写函数来逆转链表:
```c
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL; // 初始化前驱指针为空
ListNode* curr = head; // 初始化当前指针指向头节点
// 遍历链表
while (curr != NULL) {
ListNode* nextTemp = curr->next; // 保存下一个节点
curr->next = prev; // 将当前节点的next指向前一个节点
prev = curr; // 移动前驱指针到当前节点
curr = nextTemp; // 移动当前节点到下一个节点
}
return prev; // 返回新的头节点,即原链表的尾部
}
```
在这个函数中,每次遍历时我们都改变当前节点的`next`指针,使得它指向原来的前一个节点,直到遍历完整个链表。最后返回`prev`节点,这就是逆转后的链表的新头节点。
如果你有一个名为`L`的具体链表实例,你可以像下面这样调用这个函数来逆转它:
```c
// 假设 L 已经初始化好
ListNode* newHead = reverseList(L);
```
阅读全文