单链表的初始化和插⼊(C语⾔实现)
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
int data;
struct Lnode* next;
}Lnode,* linklist;
void initlinklist(Lnode*&L,int n=10){//定义头结点L与链表的长度n
Lnode*L1;//L1指向当前所在节点
L=(Lnode*)malloc(sizeof(Lnode));
Lnode*L2=(Lnode*)malloc(sizeof(Lnode));
L2=L;//利⽤L2存储头结点位置
if(L==NULL){printf("分配空间失败");}
L->next =NULL;
for(int i =1; i <= n; i++){
L1=(Lnode*)malloc(sizeof(Lnode));
L1->data = i;
L->next =L1;
L1->next =NULL;
L=L1;
}
L=L2;
c语言listinsert函数
}
//在第i个位置插⼊元素e,带头结点
//思路:到第i-1个节点,分配空间,改指针
bool listinsert(linklist&L, int i, int e){
if(i <1){return false;}
Lnode* p;//建⽴⼀个指针⽤来指向当前扫描的结点
int j =0;//当前p指向的第⼏个节点
p =L;//L指向头结点,第“0”个节点
while(p !=NULL&& j < i -1){//p指向不为空且j < i - 1时进⾏循环,到第i-1个节点
p = p->next;
j++;
}
if(p ==NULL)//i值不合法,i-1的值已超过链表长度n
{
return false;
}
Lnode* s =(Lnode*)malloc(sizeof(Lnode));//s为要插⼊的节点
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
int main(){
Lnode*L;
int i, e;
initlinklist(L,100);
if(listinsert(L,72,6666)){
for(i =1; i <=100; i++){
printf("%d\n",L->data);
L=L->next;
}
printf("已于表中插⼊成功");
}
else{printf("插⼊失败!");}
return1;
}
//当链表不带头结点时,插⼊删除第1个元素则需要变化头指针,需要另外讨论
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
int data;
struct Lnode *next;
}Lnode,*linklist;
//思路:到第i-1个节点,分配空间,改指针
bool listinsert(linklist&L, int i, int e){
if(i <1){return false;}
if(i ==1){
Lnode* s =(Lnode*)malloc(sizeof(Lnode));
s->data = e;
s->next =L;
L= s;
return true;
}
Lnode* p;//建⽴⼀个指针⽤来指向当前扫描的结点
int j=1;//当前p指向的第⼏个节点此处不同
p =L;//L指向头结点,第“0”个节点
while(p !=NULL&& j < i -1){//p指向不为空且j < i - 1时进⾏循环,到第i-1个节点  p = p->next;
j++;
}
if(p ==NULL)//i值不合法
return false;
Lnode* s =(Lnode*)malloc(sizeof(Lnode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。