链表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 指针指向当前的第一个节点,使新节点成为新的第一个节点。
// 更新头指针,使它指向新的第一个节点。
// 这样做的原因是,链表的头指针需要始终指向链表的第一个节点,以便我们能够轻松地访问整个链表。
相关推荐
雾时之林1 小时前
数据结构--------顺序表
数据结构
靠近彗星2 小时前
3.3栈与队列的应用
数据结构·算法
while(1){yan}4 小时前
数据结构之链表
数据结构·链表
Han.miracle6 小时前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
独自破碎E8 小时前
判断链表是否为回文
数据结构·链表
liu****12 小时前
8.list的模拟实现
linux·数据结构·c++·算法·list
武帝为此15 小时前
【B树与B+树详解】
数据结构·b树
南莺莺15 小时前
邻接矩阵的基本操作
数据结构·算法··邻接矩阵
观望过往15 小时前
【Java数据结构】队列详解与经典 OJ 题目实战
java·数据结构
aramae16 小时前
详细分析平衡树--红黑树(万字长文/图文详解)
开发语言·数据结构·c++·笔记·算法