c++带头节点的单链表逆置
时间: 2024-10-07 15:04:36 浏览: 56
在C++中,如果我们要逆置一个带头节点的单链表,可以采用迭代或递归的方式来实现。这里我会介绍一种常见的迭代方法:
首先,我们需要定义链表结构,通常会有一个指向下一个节点的指针`next`和一个特殊的头结点`head`。
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {} // 带有值的链表节点构造函数
};
```
接下来,创建一个辅助函数用于交换两个节点的指针:
```cpp
void swapNodes(ListNode*& a, ListNode*& b) {
ListNode temp = *a;
a = b;
b = temp;
}
```
逆置链表的主要步骤如下:
1. 定义两个指针`prev`和`current`,初始时都设为头节点`head`,然后`prev`移到`head->next`。
2. 当`current`不为空时,将`current`的`next`指向前一个节点`prev`,然后前进`prev`和`current`。
3. 循环直到`current`为空(即遍历完整个链表)。
```cpp
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
ListNode* nextTemp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点指向prev
prev = current; // prev指向下一次需要反转的节点
current = nextTemp; // 进行到下一次循环
}
return prev; // 返回新的头节点
}
```
阅读全文