算法基础之单链表

单链表

  • 核心思想: 用数组模拟链表(new节点非常慢 用数组模拟快)

    • eN 表示节点value neN表示next指针指向 (空节点为-1)

    cpp 复制代码
      #include<iostream>
      using namespace std;
      const int N=100010;
      
      //head头结点的指针
      //e[N] 表示节点value ne[N]表示next指针指向 
      //idx为当前操作的节点下标
      int head, e[N],ne[N],idx;
      
      //初始化
      void init(){
          head=-1;
          idx=0;
      }
      
      //向头结点后面添加一个节点
      void add_to_head(int x) {
          e[idx] = x;
          ne[idx] = head; //head只是一个指针 不是节点(没有value) 插入节点 让新节点作为真正的头节点 指向-1(空)
          head = idx;
          idx++;
      }
      void add(int k,int x){
          e[idx] = x;
          ne[idx] = ne[k];
          ne[k] =idx;
          idx++;
      } 
      void remove(int k){
          ne[k] = ne[ne[k]]; //直接连下下个
      }
      int main(){
          int m;
          cin>>m;
          char c;
          init();
          while(m--){
              int k,x;
              cin>>c;
              if(c=='H') {
                  cin>>x;
                  add_to_head(x);
              }
              else if(c=='D'){
                  cin>>k;
                  //如果只有头节点 则删除头节点(第一个节点)
                  if(!k) head=ne[head];
                  remove(k-1);
              }
              else{
                  cin>>k>>x;
                  add(k-1,x);
              }
          }
          for(int i = head;i!=-1;i=ne[i]) cout<<e[i]<<' ';
          
          cout<<endl;
          return 0;
      }
相关推荐
洛阳纸贵4 分钟前
MATLAB-matlab基础知识
学习·算法·matlab
落羽的落羽9 分钟前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生11 分钟前
Linux-进程控制
linux·运维·服务器·c++
Nil20826 分钟前
leetcode 17电话号码的字母组合
算法·leetcode·职场和发展
刃神太酷啦31 分钟前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
203号居民2 小时前
LeetCode hot 100 — 25. K 个一组翻转链表
算法·leetcode·链表
ocean21033 小时前
2025-2026年AI算法与模型研发面试高频知识点洞察
人工智能·算法·面试
Nil2083 小时前
leetcode 78子集
数据结构·算法·leetcode
喜欢吃燃面4 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
en.en..4 小时前
Linux fork() 工作原理
数据结构·算法