链表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 指针指向当前的第一个节点,使新节点成为新的第一个节点。
// 更新头指针,使它指向新的第一个节点。
// 这样做的原因是,链表的头指针需要始终指向链表的第一个节点,以便我们能够轻松地访问整个链表。
相关推荐
tachibana21 小时前
hot100 回文链表(234)
java·网络·数据结构·leetcode·链表
aaaameliaaa2 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
星空露珠6 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
jinyishu_6 小时前
常见排序算法详解
数据结构·算法·排序算法
东华万里7 小时前
第31篇 数据结构入门:顺序表
数据结构·大学生专区
Vect__8 小时前
Go 数据结构 slice 深度剖析
开发语言·数据结构·golang
青山木8 小时前
Hot 100 --- LRU 缓存
java·数据结构·算法·leetcode·链表·缓存·哈希
剑挑星河月10 小时前
35.搜索插入位置
java·数据结构·算法·leetcode
闪电悠米10 小时前
力扣hot100-438.找到字符串中所有字母异位词-固定长度滑动窗口详解
linux·服务器·数据结构·算法·leetcode·滑动窗口·力扣hot100
人道领域10 小时前
【LeetCode刷题日记】51.N皇后
数据结构·算法