双向链表插入.顺序输出 (索引数组版 + 指针版)

自学链表的时候遇到了两种插入写法,整理如下:

  • 索引数组版可以在任意位置插入数据,且不需要搜索数据的位置,时间复杂度为O(1);
  • 指针版如果要任意位置插入数据,则要搜索对应节点,时间复杂度为O(n); 听说有高阶方法可以降低时间复杂度,但我目前不会。

自学时遇到的问题及注意事项如下图所示,在这里插入图片描述

索引数组版

struct Node{
    int pre,next,data;
    Node(int _data=0,int _pre=0,int _next=0){
        pre=_pre;data=_data;next=_next;
    }
};
Node node[1000];
int tot=0,index[1000]={0};

void ins_back(int x,int y){
int now=index[x];
tot++;
node[tot]=Node(y,now,node[now].next);
node[node[now].next].pre=tot;
node[now].next=tot;
index[y]=tot;
}

void ins_front(int x,int y){
int now=index[x];
tot++;
node[tot]=Node(y,node[now].pre,now);
node[node[now].pre].next=tot;
node[now].pre=tot;
index[y]=tot;
}

void del_node(int x){
int now=index[x];
node[node[now].pre].next=node[now].next;
node[node[now].next].pre=node[now].pre;
index[x]=0;
}


now=node[0].next;
while(now){
    cout<<node[now].data;
    now=node[now].next;
}

    return 0;
}

指针版

struct Node{//类似于迭代
int data ;
Node *pre;
Node *next;
};

Node *head,*tail,*temp;
int tot=0;
void ins_back(int x)			
{
    tot++;
    temp =new Node;		
    temp->data = x;
    temp->next = NULL;	    
    temp->pre = tail;      

    if (tail != NULL)			
	{tail->next = temp;
	    tail = temp;
	}
   else{
    tail = temp;		
	head = tail;        
	}

}

void ins_front(int x){
tot++;
temp=new Node;
temp->data=x;
temp->pre=NULL;
temp->next=head;

  if(head!=NULL){
    head->pre=NULL;
      head = temp;
  }
    else{
        head=temp;
        tail=head;
    }
}

void init()
{
	nodeCount = 0;
	head = NULL;
	tail = NULL;
}


node *p=head;
while(p!=NULL){
    cout<<p->data;
    p=p->next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值