链表

#include <iostream>
using namespace std;

// 定义链表结点结构体
struct ListNode {
    int data;           // 数据
    ListNode* next;     // 指向下一个结点的指针
};

int main() {
    int n;
    cin >> n;  // 读取数据个数

    // 创建头结点
    ListNode* head = new ListNode();
    head->next = nullptr;

    // 当前结点指针,用于插入新结点
    ListNode* current = head;

    // 建立链表
    for (int i = 0; i < n; i++) {
        int data;
        cin >> data;  // 读取数据

        // 创建新结点
        ListNode* newNode = new ListNode();
        newNode->data = data;
        newNode->next = nullptr;

        // 将新结点插入到链表尾部
        current->next = newNode;
        current = newNode;
    }

    int m;
    cin >> m;  // 读取欲删除的数据

    // 删除值为 m 的结点
    ListNode* prev = head;  // 前驱结点
    ListNode* curr = head->next;  // 当前结点

    while (curr != nullptr) {
        if (curr->data == m) {
            // 删除当前结点
            prev->next = curr->next;
            delete curr;  // 释放内存
            curr = prev->next;  // 继续检查下一个结点
        } else {
            // 移动到下一个结点
            prev = curr;
            curr = curr->next;
        }
    }

    // 计算删除后的链表长度
    int length = 0;
    curr = head->next;
    while (curr != nullptr) {
        length++;
        curr = curr->next;
    }

    // 输出删除后的链表长度
    cout << length << endl;

    // 输出删除后的链表数据
    curr = head->next;
    while (curr != nullptr) {
        cout << curr->data;
        if (curr->next != nullptr) {
            cout << &quot; &quot;;
        }
        curr = curr->next;
    }
    cout << endl;

    // 释放链表内存
    curr = head;
    while (curr != nullptr) {
        ListNode* temp = curr;
        curr = curr->next;
        delete temp;
    }

    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务