请用【c++】帮我写一段造建链表代码,并帮我讲解下实现逻辑
时间: 2024-10-05 22:01:17 浏览: 16
在C++中,我们可以使用结构体或类来创建链表。这里是一个简单的单向链表节点的定义以及链表的基本操作(插入节点和打印链表),我会一步步解释实现逻辑:
```cpp
#include <iostream>
// 链表节点的定义
struct ListNode {
int val; // 节点值
ListNode* next; // 指向下个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数,初始化值和next为nullptr
};
// 插入节点到链表头部
void insertAtHead(ListNode*& head, int val) {
ListNode* newNode = new ListNode(val); // 创建新节点
newNode->next = head; // 新节点的next指向原头节点
head = newNode; // 更新头节点为新节点
}
// 打印链表
void printList(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " -> ";
head = head->next;
}
std::cout << "NULL" << std::endl;
}
int main() {
ListNode* head = nullptr; // 初始化链表为空
// 插入节点
insertAtHead(head, 1);
insertAtHead(head, 2);
insertAtHead(head, 3);
// 打印链表
printList(head); // 输出: 3 -> 2 -> 1 -> NULL
return 0;
}
```
实现逻辑解析:
1. `ListNode` 结构体定义了一个节点,包含整数值 `val` 和一个指向下一个节点的指针 `next`。构造函数用于初始化新节点。
2. `insertAtHead` 函数接收一个链表头指针 `head` 和一个值 `val`。它首先创建一个新的节点,然后将新节点的 `next` 指向当前的头节点,最后更新头指针指向新节点,实现了在链表头部插入节点的操作。
3. `printList` 函数通过遍历链表,逐个输出每个节点的值,直到到达 `nullptr`,表示链表结束。
4. 在 `main` 函数中,我们创建了一个空链表 `head`,然后插入了三个节点,最后打印出链表的内容。