链表linked list: 将新节点插入到了链表的开头

这段代码实现了在链表的开头插入新节点的功能。让我解释一下它的逻辑:

  • 首先,它创建了一个新的节点 newNode
  • 然后,将新节点的数据域设置为 newData,即要插入的新数据。
  • 接着,将新节点的指针域 next 指向当前的头节点 head。这样,新节点就成为了链表的新头节点,而原来的头节点成为了新节点的下一个节点。
  • 最后,将头指针 head 更新为新插入的节点,以确保链表的头指针指向新的头节点。

在这段代码中,新节点 newNode 被插入到链表的开头。它的 next 指针被设置为当前链表的头节点(由 head 指向)。然后,head 指针被更新为新插入的节点 newNode,以确保链表的头部正确更新。

cpp 复制代码
#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;
};

class LinkedList {
private:
    Node* head; // 头指针,指向链表的第一个节点

public:
    LinkedList() {
        head = nullptr; // 初始时链表为空
    }

    // 在链表头部插入一个新节点
    // 创建一个新节点,并设置它的数据值。
    // 将新节点的 next 指针指向当前的第一个节点,使新节点成为新的第一个节点。
    // 更新头指针,使它指向新的第一个节点。
    void insertAtBeginning(int newData) {
        Node* newNode = new Node;
        newNode->data = newData;
        newNode->next = head; //这行代码将新节点的 next 指针指向当前的头节点,这样新节点就成为了链表的新头节点。
        head = newNode; //这行代码将头指针 head 更新为新插入的节点,以确保链表的头指针指向新的头节点。
    }

    // 删除链表中的第一个节点
    void deleteAtBeginning() {
        if (head == nullptr) {
            cout << "Linked list is empty. Cannot delete from an empty list." << endl;
            return;
        }
        Node* temp = head;
        head = head->next;
        delete temp;
    }

    // 打印链表的所有节点数据
    void printList() {
        Node* temp = head;
        cout << "Linked List: ";
        while (temp != nullptr) {
            cout << " "<< temp->data<< " " <<temp;
            temp = temp->next;
        }
        cout << endl;
    }
};

int main() {
    LinkedList myList;

    myList.insertAtBeginning(3);
    myList.insertAtBeginning(7);
    myList.insertAtBeginning(9);
    myList.printList(); // 输出: Linked List: 9 7 3

    myList.deleteAtBeginning();
    myList.printList(); // 输出: Linked List: 7 3

    return 0;
}

// 让我们来解释一下插入数据的顺序和头指针之间的关系。

// 在单向链表中,头指针通常指向链表中的第一个节点。当我们要在链表的头部插入一个新节点时,我们需要进行以下步骤:

// 创建一个新节点,并设置它的数据值。
// 将新节点的 next 指针指向当前的第一个节点,使新节点成为新的第一个节点。
// 更新头指针,使它指向新的第一个节点。
// 这样做的原因是,链表的头指针需要始终指向链表的第一个节点,以便我们能够轻松地访问整个链表。
相关推荐
handler0117 分钟前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
糖果店的幽灵3 小时前
Pandas DataFrame 数据结构详解
数据结构·pandas
起个破名想半天了4 小时前
算法与数据结构之Dijkstra算法
数据结构·dijkstra·单源最短路径·迪杰斯特拉算法
啦啦啦啦啦zzzz4 小时前
数据结构:哈夫曼编码
数据结构·c++·哈夫曼编码
ChillCoding5 小时前
更新中:C++ STL库,查找排序(基础算法),数据结构,数学算法,竞赛相关基础
数据结构·c++·算法
apcipot_rain6 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
落羽的落羽6 小时前
【项目】JsonRpc框架——开发实现2(业务层)
linux·数据结构·c++·人工智能·算法·json·动态规划
SHARK_pssm6 小时前
【数据结构——单链表】
数据结构·经验分享·笔记
lightqjx6 小时前
【算法】数据结构_并查集
数据结构·算法·并查集
小蒋学算法6 小时前
算法-掉落的方块-线段树
数据结构·算法