1.原地逆置单链表,不允许在原有链表基础上malloc新的数据结点 原链表: 1----> 3 ----> 5 逆置后: 5----> 3 ----> 1
时间: 2024-02-26 08:50:22 浏览: 91
单链表的原地逆置
要实现原地逆置单链表,可以使用三个指针来完成。具体步骤如下:
1. 定义三个指针:prev、curr和next,分别表示当前节点的前一个节点、当前节点和当前节点的下一个节点。
2. 初始化prev为NULL,curr为链表的头节点。
3. 遍历链表,每次迭代中执行以下操作:
- 将next指针指向curr的下一个节点。
- 将curr的下一个节点指向prev。
- 将prev指针指向curr。
- 将curr指针指向next。
4. 遍历结束后,将链表的头节点指向prev,即完成了原地逆置。
下面是C++代码示例:
```cpp
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
ListNode* next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
int main() {
// 创建链表
ListNode* head = new ListNode(1);
ListNode* node1 = new ListNode(3);
ListNode* node2 = new ListNode(5);
head->next = node1;
node1->next = node2;
// 原链表
ListNode* curr = head;
while (curr != NULL) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
// 逆置后的链表
ListNode* reversedHead = reverseList(head);
curr = reversedHead;
while (curr != NULL) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
1 3 5
5 3 1
```
阅读全文