C++ 实例化对象 #

  • 使用类名实例化对象的方式:
    类名 变量 = 类名();

  • 使用 new 方式动态分配内存:
    类名* 指针名 = new 类名();

#include<bits/stdc++.h>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;

    // 构造函数
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

int main() {
    // 节点创建
    ListNode *node1 = new ListNode;            // 创建空节点
    ListNode *node2 = new ListNode();          // 初始化值为 0 的节点
    ListNode *node3 = new ListNode(100);       // 初始化值为 100 的节点

    // 插入节点
    node1->next = node2;

    // 创建链表:链表是多个节点串联起来的
    ListNode *head = new ListNode();           // 头节点

    // 循环前最好设置一个哑节点(dummy node)
    ListNode *p = head;                        // 指针 p 用来遍历链表
    int i = 1;
    while (i < 5) {
        ListNode *node = new ListNode(i);     // 创建一个新的节点
        p->next = node;                       // 插入节点到链表中
        p = p->next;                          // 移动指针
        i++;
    }
    p->next = nullptr;                         // 最后一个节点的 next 指针指向 nullptr

    // 遍历链表并输出
    p = head;
    while (p) {
        cout << p->val << " ";                // 输出当前节点的值
        p = p->next;                          // 移动到下一个节点
    }

    // 删除节点
    ListNode *pre = p->next;                 // 指向要删除的节点
    p->next = p->next->next;                 // 跳过要删除的节点
    delete pre;                              // 释放要删除的节点内存

    // nullptr 代表空指针,NULL 代表 0(不推荐使用 NULL)
    pre = nullptr;                           // 将指针 pre 置为空
}

代码说明: #

  1. 链表节点的定义
    ListNode 结构体包含一个整数 val 和一个指向下一个节点的指针 next。该结构体提供了多个构造函数来支持不同的初始化方式。

  2. 节点的创建与插入
    使用 new 操作符创建节点,可以通过不同的方式初始化节点的值。节点插入通过修改 next 指针连接新节点。

  3. 链表的遍历
    使用 while 循环遍历链表,打印每个节点的值,直到到达链表的末尾(nullptr)。

  4. 删除节点
    删除链表中的节点时,首先将指针指向要删除的节点,并将其从链表中移除,然后使用 delete 释放该节点的内存。

注意事项: #

  • 在删除节点时,特别是使用 delete 操作符时,确保指针已经正确指向了节点,避免出现内存泄漏。
  • 建议使用 nullptr 来代替 NULLnullptr 是 C++11 引入的空指针常量,类型安全。!