1、小明学习了链表这个数据结构后感觉很有意思,他想要实现这种数据结构并 实现链表的反转,但是小明同学不太会,他找到你帮忙,你能帮他实现吗? 1 实现链表 2 实现链表的反转(要求在原链表的基础上实现,不增加额外的内存开销)
时间: 2024-05-15 11:19:06 浏览: 4
当然可以帮助小明同学实现链表以及链表反转。以下是一个示例的 C++ 代码:
```c++
#include <iostream>
using namespace std;
// 定义链表节点的结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 实现链表类
class LinkedList {
public:
LinkedList() : head(nullptr) {}
// 向链表中插入一个节点
void insert(int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
return;
}
ListNode* curr = head;
while (curr->next != nullptr) {
curr = curr->next;
}
curr->next = newNode;
}
// 实现链表的反转
void reverse() {
if (head == nullptr || head->next == nullptr) {
return;
}
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
// 打印链表的所有元素
void printList() {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
private:
ListNode* head;
};
// 测试链表的实现
int main() {
LinkedList lst;
lst.insert(1);
lst.insert(2);
lst.insert(3);
lst.insert(4);
cout << "原始链表: ";
lst.printList();
lst.reverse();
cout << "反转之后的链表: ";
lst.printList();
return 0;
}
```
该 C++ 代码中定义了一个链表类 `LinkedList`,其中包含了如下方法:
- `insert(int val)`:向链表中插入一个新节点,节点的值为 `val`。
- `reverse()`:实现了链表的反转功能。
- `printList()`:打印链表的所有元素。
在主函数中,我们进行了链表的初始化操作,并测试了链表反转的实现。这个代码类似的数据结构题目在实际开发中的使用还是比较广泛的。