链表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 指针指向当前的第一个节点,使新节点成为新的第一个节点。
// 更新头指针,使它指向新的第一个节点。
// 这样做的原因是,链表的头指针需要始终指向链表的第一个节点,以便我们能够轻松地访问整个链表。
相关推荐
草莓工作室5 分钟前
数据结构5:线性表5-循环链表
数据结构·循环链表
1白天的黑夜12 小时前
递归-21.合并两个有序链表-力扣(LeetCode)
c++·leetcode·链表·递归
赵杰伦cpp3 小时前
list的迭代器
开发语言·数据结构·c++·算法·链表·list
胖咕噜的稞达鸭4 小时前
二叉树搜索树插入,查找,删除,Key/Value二叉搜索树场景应用+源码实现
c语言·数据结构·c++·算法·gitee
清风wxy5 小时前
C语言基础数组作业(冒泡算法)
c语言·开发语言·数据结构·c++·windows·算法
程序员东岸5 小时前
避坑修链表:从顺序表到单链表的那点事儿(含可跑示例与小项目串联)
数据结构·笔记·学习·程序人生·链表
懒羊羊不懒@6 小时前
算法入门数学基础
c语言·数据结构·学习·算法
OKkankan7 小时前
list的使用和模拟实现
数据结构·c++·算法·list
爱吃生蚝的于勒7 小时前
【Linux】零基础学会linux环境基础开发工具使用(yum,vim,makefile,gdb)
linux·服务器·数据结构·c++·蓝桥杯·编辑器·vim
Chloeis Syntax21 小时前
栈和队列笔记2025-10-12
java·数据结构·笔记·