用c语言设计算法将带头结点的单链表就地逆置
时间: 2024-10-08 08:05:00 浏览: 49
反转带头结点的链表(4种方法)
在C语言中,你可以使用迭代的方式实现带头结点的单链表就地逆置。这里是一个简单的算法步骤:
1. 定义两个指针,一个指向当前节点(`prev`),另一个指向下一个节点(`current`)。
2. 初始化这两个指针,将`prev`设置为头节点(因为逆置后头节点会变成最后一个节点),`current`设置为`prev->next`。
3. 进入循环,直到`current`为空(即遍历到原链表的尾部):
a. 将`current`的下一个节点(`next_node`)赋值给`current`。
b. 更新`current`的下一个节点为其前一个节点,即`current->next = prev`。
c. 移动`prev`和`current`,使它们分别指向下一个节点:`prev = current`, `current = next_node`。
4. 循环结束后,`prev`指向的就是新的头节点。
以下是该算法的伪代码形式:
```c
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* prev = head;
struct ListNode* current = head->next;
while (current != NULL) {
// 保存当前节点的下一个节点
struct ListNode* next_node = current->next;
// 逆置操作
current->next = prev;
// 指针前进
prev = current;
current = next_node;
}
// 如果原头节点是最后一个节点,则更新新头
if (prev == head)
head = prev;
return head;
}
```
阅读全文