数据结构单链表的逆置c++代码
时间: 2024-10-09 20:16:03 浏览: 63
在C++中,你可以使用迭代或递归的方式来反转一个单链表。这里我会展示一个使用迭代的方法:
```cpp
#include <iostream>
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 迭代法反转链表
ListNode* reverseList(ListNode* head) {
ListNode prev(nullptr);
ListNode curr(head);
ListNode* nextTemp;
while (curr != nullptr) {
// 保存当前节点的下一个节点
nextTemp = curr->next;
// 将当前节点指向它的前驱节点
curr->next = prev;
// 移动指针到下个节点
prev = curr;
curr = nextTemp;
}
return prev; // 返回新的头节点(原尾部现在成为新头部)
}
int main() {
// 创建一个示例链表
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(3);
list->next->next->next = new ListNode(4);
std::cout << "Original List: ";
ListNode* temp = list;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "None\n";
// 反转链表
list = reverseList(list);
std::cout << "Reversed List: ";
temp = list;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "None\n";
delete temp; // 不要忘记释放内存
return 0;
}
```
这个程序首先定义了一个`ListNode`结构体表示链表节点,然后实现了`reverseList`函数,它接受链表的头节点作为参数,通过三个指针prev、curr和nextTemp进行迭代操作,最终返回新的头节点。在主函数中,我们创建了一个简单的链表并展示了逆置前后的情况。
如果你对其他细节有疑问,或者想了解递归版本的代码,请告诉我。
阅读全文