C++中如何定义单链表的指针?
时间: 2024-02-13 08:00:19 浏览: 130
在C++中,定义单链表的指针需要先定义链表节点的结构体,然后通过指向该结构体的指针来定义单链表的指针。例如:
```c++
struct ListNode {
int val; // 节点的值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
// 定义单链表的指针
ListNode* head = nullptr;
```
其中,`ListNode`是链表节点的结构体,包含节点的值`val`和指向下一个节点的指针`next`。`head`是头指针,可以通过遍历链表来访问链表中的每一个节点。在实际使用中,可以通过动态分配内存来创建新的节点,并将其插入到链表中。
相关问题
用c++实现定义单链表的类,实现一个带头结点的单链表的逆置,并将逆置前后的单链表分别遍历输出。单链表中各结点的值和结点个数等自定。
在C++中,我们可以定义一个单链表类`ListNode`,包含一个整数值和指向下一个节点的指针。然后创建一个`SingleLinkedList`类,用于维护链表的基本操作,包括添加元素、删除元素以及逆置链表。以下是简单的实现:
```cpp
#include <iostream>
// 定义链表节点
class ListNode {
public:
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
// 单链表类
class SingleLinkedList {
private:
ListNode* head; // 头节点指针
public:
SingleLinkedList() : head(nullptr) {}
// 添加元素到链表末尾
void addNode(int value) {
ListNode* newNode = new ListNode(value);
if (!head) {
head = newNode;
} else {
ListNode* current = head;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
}
// 逆置链表
void reverseList() {
ListNode* prev = nullptr;
ListNode* current = head;
ListNode* nextTemp;
while (current != nullptr) {
nextTemp = current->next;
current->next = prev;
prev = current;
current = nextTemp;
}
head = prev;
}
// 遍历并打印原链表
void printOriginal() {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "NULL\n";
}
// 遍历并打印逆置后的链表
void printReversed() {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "NULL\n";
}
};
```
使用这个类,你可以创建一个链表,对其进行逆置,然后分别打印出原链表和逆置后的链表。
c++中清空单链表代码
在 C++ 中,清空单链表通常涉及两个步骤:首先,将链表头指针设置为空,表示链表已经结束;其次,如果链表中有节点,需要释放它们所占用的内存。以下是简单的代码示例:
```cpp
#include <iostream>
// 定义链表节点结构体
struct Node {
int data;
Node* next;
};
// 清空链表函数
void clearList(Node** head) {
// 如果链表非空
if (*head != nullptr) {
// 遍历链表,将每个节点的next指向前一个节点,形成环形链表
Node* current = *head;
while (current != nullptr) {
Node* temp = current->next;
current->next = *head; // 将当前节点指向头节点
// 释放当前节点
delete current;
current = temp;
}
// 最后更新头指针为nullptr
*head = nullptr;
}
}
int main() {
// 创建链表并添加一些元素...
// ...
// 调用clearList函数清空链表
clearList(&head);
return 0;
}
阅读全文