首页 > 其他分享 >链表

链表

时间:2024-04-05 11:22:05浏览次数:26  
标签:LinkList LNode int nullptr next 链表

链表

  1. 链表结构定义

    // 链表结构定义
    typedef struct LNode{
        int data;
        struct LNode* next;
    }LNode, *LinkList;
    
  2. 初始化链表

    // 初始化链表
    bool InitList(LinkList &L){
        L = new LNode;
        L->next = nullptr;
        return true;
    }
    
  3. 创建链表(头插法)

    // 创建链表(头插法)
    void CreatListHeadInsert(LinkList &L){
        cout << "请输入要插入的元素个数"  << endl;
        int n;
        cin >> n;
        while(n--) {
            int t;
            cin >> t;
            LNode* p = new LNode;   // new一个待插入的新节点
            p->data = t;
            p->next = L->next;
            L->next = p;
        }
    }
    
  4. 创建链表(尾插法)

    // 创建链表(尾插法)
    void CreatListTailInsert(LinkList &L){
        LNode *tail = L;        // 尾指针
        cout << "请输入要插入的元素个数"  << endl;
        int n;
        cin >> n;
        while(n--) {
            int t;
            cin >> t;
            LNode* p = new LNode;
            p->data = t;
            tail->next = p;
            tail = p;
        }   
        tail->next = nullptr;
    }
    
  5. 遍历链表

    // 遍历链表
    void ListShow(const LinkList &L){
        LNode* p = L->next;
        while(p != nullptr){
            cout << p->data << " ";
            p = p->next;
        }
        cout << endl;
    }
    
  6. 求表长

    // 求表长
    int Length(const LinkList &L){
        int len = 0;
        LNode *p = L;
        while(p->next != nullptr){
            p = p->next;
            len++;
        }
        return len;
    }
    
  7. 插入节点

    // 插入节点
    bool ListInsert(LinkList &L, int i, int e){
        LNode *p = L;
        int j = 0;
        while(p != nullptr && j < i - 1){
            p = p->next;
            j++;
        }
        if(p == nullptr) return false;  // i越界(也可提前判断)
    
        LNode* s = new LNode;
        s->data = e;
        s->next = p->next;
        p->next = s;
        return true;
    }
    
  8. 删除节点

    // 删除节点
    bool LisetDelete(LinkList &L, int i, int e){
        LNode *p = L;
        int j = 0;
        while(p != nullptr && j < i - 1){
            p = p->next;
            j++;
        }
        // i的值非法
        if(p == nullptr || p->next == nullptr) 
            return false;
        LNode *q = p->next;
        p->next = q->next;
        delete q;
        return true;
    }
    
  9. 销毁链表

    // 销毁链表
    bool DestoryList(LinkList &L){
        if(L == nullptr) return false;
    
        LNode *p;
        while(L != nullptr){
            p = L->next;
            delete L;
            L = p;
        }
        return true;
    }
    
  10. 链表逆置

    // 链表逆置
    bool ListReverse(LinkList &L){
        if(L->next == nullptr) return false;
        LNode *p = L->next, *q;
        L->next = nullptr;      // L置空
        while(p != nullptr){
            q = p->next;
            p->next = L->next;  // 头插转置
            L->next = p;
            p = q;
        }
        return true;
    }
    

标签:LinkList,LNode,int,nullptr,next,链表
From: https://www.cnblogs.com/zhangfirst1/p/18115585

相关文章

  • 多种方法从尾部移除指定位置的链表节点
    连绵的春雨把人困在家乡,于是我继续开始刷着算法题,通过19.Remove年thNodeFromEndofList复习了一波链表的操作,这道题也是比较典型的链表问题,值得分享一下。题目如下所示:Giventheheadofalinkedlist,removethenthnodefromtheendofthelistandreturnitsh......
  • 数据结构——从入门到飞升——两个有序链表的交集
    题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有......
  • 数据结构——从入门到飞升——两个有序链表的合并
    首先,我们要知道sort()函数的使用方法:1.需要函数头#include2.sort(begin,end,cmp)begin:指向待分类元素的第一个指针end:指向待分类元素最后一个的指针其中end-begin是所有数的数量cmp:表示排序的样式,没有就是默认从小到大排要是想从大到小排,可写成greater,int也可以写成别的......
  • 数据结构与算法分析实验3 [进阶]通过链表实现多项式加法和乘法
    文章目录大致内容介绍多项式加法代码一览头文件Poly.h内容如下:实现文件Poly.cpp内容如下:初始化增加元素删除元素功能函数遍历函数清除销毁打印多项式向多项式内插入一个元素源文件main.cpp内容如下:实现效果:多项式乘法实现方法:在Poly.h中添加声明:在Poly.cpp中添加实现:在......
  • 单链表 基本操作
    目录初始化求表长按序号查找结点按值查找结点插入结点(后插)插入结点(前插)删除结点(直接删除)删除结点(间接删除)头插法建立单链表尾插法建立单链表打印单链表 总代码测试样例 初始化//单链表typedefintElemType;typedefstructLNode{//这时这个LNode......
  • LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】
    LeetCode-146.LRU缓存【设计哈希表链表双向链表】题目描述:解题思路一:双向链表,函数get和put必须以O(1)的平均时间复杂度运行。一张图:解题思路二:0解题思路三:0题目描述:请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LR......
  • 单链表-案例-new
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • 双向链表-new
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • 【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
    合并两个有序链表题目描述思路及实现方式一:迭代(推荐)思路代码实现Java版本C语言版本Python3版本复杂度分析方式二:递归(不推荐)思路代码实现Java版本C语言版本Python3版本复杂度分析总结相似题目标签:字符串处理、前缀判断题目描述将两个升序链表合并为一个新的升......
  • SWUST OJ 952 单链表插入
    一、题目题目描述建立长度为n的单链表,在第i个结点之前插入数据元素data。输入第一行为自然数n,表示链式线性表的长度;第二行为n个自然数表示链式线性表各元素值;第三行为指定插入的位置i;第四行为待插入数据元素data。输出指定插入位置合法时候,输出插入元素后的链式线性......