链表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 指针指向当前的第一个节点,使新节点成为新的第一个节点。
// 更新头指针,使它指向新的第一个节点。
// 这样做的原因是,链表的头指针需要始终指向链表的第一个节点,以便我们能够轻松地访问整个链表。
相关推荐
双叶8365 分钟前
(C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
c语言·开发语言·数据结构·c++
真的想上岸啊34 分钟前
c语言第一个小游戏:贪吃蛇小游戏05
c语言·算法·链表
元亓亓亓1 小时前
LeetCode热题100--206.反转链表--简单
算法·leetcode·链表
想睡hhh2 小时前
c++进阶——哈希表的实现
开发语言·数据结构·c++·散列表·哈希
打鱼又晒网3 小时前
数据类型:List
数据结构·list
java程序员CC3 小时前
记录为什么LIst数组“增删慢“,LinkedList链表“查改快“?
数据结构·链表·list
.格子衫.4 小时前
015枚举之滑动窗口——算法备赛
数据结构·算法
虾球xz9 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
jiunian_cn13 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
康康这名还挺多15 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach