单链表头插法逆置C++完整代码类
时间: 2024-10-08 21:17:49 浏览: 52
单链表头插法逆置是指将给定的单向链表,通过每次插入新的节点到头部的方式,最终使得原链表的节点顺序反转。以下是使用C++编写的一个`ListNode`类及其辅助函数,用于完成单链表的头插法逆置:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
// 辅助函数,交换两个节点的next指针
void swapNodes(ListNode*& a, ListNode*& b) {
ListNode temp = *a;
a = b;
b = temp;
}
// 主函数,头插法逆置链表
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) { // 如果链表为空或只有一个元素,直接返回
return head;
}
ListNode* prev = nullptr;
ListNode* current = head;
ListNode* nextTemp = nullptr;
while (current != nullptr) {
// 使用临时变量存储当前节点的下一个节点
nextTemp = current->next;
// 交换当前节点和前一个节点的next指针
swapNodes(current, prev);
// 更新prev、current指针准备下一次循环
prev = current;
current = nextTemp;
}
return prev; // 返回新的头节点
}
// 打印链表
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
// 创建测试链表
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
cout << "Original list: ";
printList(head); // 输出原始链表
head = reverseList(head);
cout << "Reversed list: ";
printList(head); // 输出逆置后的链表
return 0;
}
```
在这个例子中,`reverseList`函数是核心部分,它利用三个指针`prev`、`current`和`nextTemp`来逐步实现头插法的链表逆置。
阅读全文