用c++编写一个代码,以单链表为存储结构,实现线性表的就地逆置
时间: 2024-12-14 17:25:55 浏览: 5
单链表线性表的链接存储结构。-数据结构中的线性表
在C++中,我们可以使用迭代的方式来实现单链表的就地逆置,即不创建额外的数据结构,仅通过改变节点指针指向达到逆转的效果。下面是一个简单的示例:
```cpp
#include <iostream>
// 定义单链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 就地逆置链表函数
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr; // 初始化前驱节点为NULL
ListNode* curr = head; // 初始化当前节点为头节点
while (curr != nullptr) { // 当前节点不为空时
ListNode* temp = curr->next; // 保存下一个节点
curr->next = prev; // 更新当前节点的next指向前驱节点
prev = curr; // 移动前驱节点到当前位置
curr = temp; // 移动当前节点到下一个节点
}
return prev; // 返回新的头节点,即原链表的尾节点
}
// 打印链表
void printList(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " ";
head = head->next;
}
std::cout << std::endl;
}
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: ";
printList(list);
list = reverseList(list); // 逆置链表
std::cout << "Reversed List: ";
printList(list);
return 0;
}
```
当你运行这个程序,它会先打印原始链表,然后打印逆置后的链表。
阅读全文