算法基础之单链表

单链表

  • 核心思想: 用数组模拟链表(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;
      }
相关推荐
科技苑6 小时前
C++ CAS与ABA问题详解,无锁编程的经典陷阱怎么解决?
c++·人工智能
GoAI6 小时前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试
Pniubi7 小时前
力扣54.螺旋矩阵
算法·leetcode·矩阵
choumou_M9 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
Coder_Shenshen10 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
BaiPeter10 小时前
ZPL文件预览
开发语言·c++
心仪久了会沦陷12 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方12 小时前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
悠仁さん13 小时前
【C++】哈希表
c++·算法·散列表