A (1087) : DS单链表--类实现

Description

用C++语言和类实现单链表,含头结点

属性包括:data数据域、next指针域

操作包括:插入、删除、查找

注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据

类定义参考

cpp 复制代码
#include<iostream>
using namespace std;
#define ok 0
#define error -1

// 链表结点定义
class ListNode
{
public:
    int data;
    ListNode *next;
    ListNode() {next = NULL;}
};
// 带头结点的单链表类定义
class LinkList
{
public:
    ListNode *head;
    int len;
    // 操作定义
    LinkList();
    ~LinkList();
    ListNode *LL_index(int i);      // 返回第i个结点的指针,如果不存在返回NULL
    int LL_get(int i);              // 获取第i个元素的数据
    int LL_insert(int i, int item); // 把数值item插入第i个位置
    int LL_del(int i);              // 删除第i个结点
    void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{
    head = new ListNode();
    len = 0;
}
LinkList::~LinkList()
{
    ListNode *p, *q;
    p = head;
    while(p != NULL)
    {
        q = p;
        p = p->next;
        delete q;
    }
    len = 0;
    head = NULL;
}
void LinkList::LL_display()
{
    ListNode *p;
    p = head->next;
    while(p)
    {
        cout << p->data << ' ';
        p = p->next;
    }
    cout << endl;
}

Input

  • 第1行先输入n表示有n个数据,接着输入n个数据
  • 第2行输入要插入的位置和新数据
  • 第3行输入要插入的位置和新数据
  • 第4行输入要删除的位置
  • 第5行输入要删除的位置
  • 第6行输入要查找的位置
  • 第7行输入要查找的位置

Output

数据之间用空格隔开,

第1行输出创建后的单链表的数据

每成功执行一次操作(插入或删除),输出执行后的单链表数据

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

Sample

AC代码:

cpp 复制代码
#include<iostream>
using namespace std;
#define ok 0
#define error -1

// 链表结点定义
class ListNode
{
public:
    int data;
    ListNode* next;
    ListNode() { next = NULL; }
};
// 带头结点的单链表类定义
class LinkList
{
public:
    ListNode* head;
    int len;
    // 操作定义
    LinkList();
    ListNode* LL_index(int i) {};      // 返回第i个结点的指针,如果不存在返回NULL
    void LL_get(int i) {
        if (i <= 0 || i > len ) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 0; j < i; j++) {
                p = p->next;
            }
            cout << p->data << endl;
        }
    };              // 获取第i个元素的数据
    void LL_insert(int i, int item) {
        if (i <= 0 || i > len + 1) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 1; j < i; j++) {
                p = p->next;
            }
            ListNode* s = new ListNode;
            s->data = item;
            s->next = p->next;
            p->next = s;
            p = s;
            len++;
            LL_display();
        }
    }; // 把数值item插入第i个位置
    void LL_del(int i) {
        if (i <= 0 || i > len) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 1; j < i; j++) {
                p = p->next;
            }
            p->next = p->next->next;
            LL_display();
            len--;
        }
    };              // 删除第i个结点
    void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{
    head = new ListNode();
    len = 0;
}
void LinkList::LL_display()
{
    ListNode* p;
    p = head->next;
    while (p)
    {
        cout << p->data << ' ';
        p = p->next;
    }
    cout << endl;
}

int main() {
    int t;
    int data;
    cin >> t;
    LinkList L;
    ListNode* p;
    p = L.head;
    while (t--) {
        ListNode* s = new ListNode;
        L.len++;
        cin >> data;
        s->data = data;
        s->next = p->next;
        p->next = s;
        p = p->next;
    }
    L.LL_display();
    int i, item;
    cin >> i >> item;
    L.LL_insert(i, item);
    cin >> i >> item;
    L.LL_insert(i, item);
    cin >> i;
    L.LL_del(i);
    cin >> i;
    L.LL_del(i);
    cin >> i;
    L.LL_get(i);
    cin >> i;
    L.LL_get(i);
}
相关推荐
月明长歌6 分钟前
【码道初阶】【LeetCode 110】平衡二叉树:如何用一个“Magic Number”将复杂度从O(N²)降为 O(N)?
linux·算法·leetcode
yaoh.wang9 分钟前
力扣(LeetCode) 14: 最长公共前缀 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
历程里程碑16 分钟前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法
t1987512827 分钟前
基于MATLAB的线性判别分析(LDA)降维算法实现方案
开发语言·算法·matlab
仰泳的熊猫37 分钟前
1108 Finding Average
数据结构·c++·算法·pat考试
老赵聊算法、大模型备案43 分钟前
2025 年 12 月北京市生成式人工智能服务备案分析:政务场景再扩容,合规生态更聚焦
人工智能·算法·microsoft·aigc·政务
liuyao_xianhui44 分钟前
山脉数组的峰顶索引_优选算法_二分查找法
算法
炽烈小老头1 小时前
【每天学习一点算法 2025/12/15】环形链表
学习·算法·链表
点云SLAM1 小时前
算法复杂度分析之——空间复杂度分析和标准库算法与容器操作的复杂度实际案例分析(3)
算法·深度优先·空间复杂度·算法性能分析·标准库算法
Liangwei Lin1 小时前
洛谷 P5788 【模板】单调栈
算法