//在第i个位置上插入元素e(带头结点)
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool ListInsert(LinkList &L ,int i,int e){
if(i<1)
return false;
LNode *p;//指针p指向当前扫描结点
int j=0;//当前p指向的是第几个结点
P=L;//L指向头结点,头结点是第0个结点,不存放数据
if(p!=NULL&&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;
}
//按位序插入(不带头结点)插入删除第一个元素时需更改头指针L
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;//指针p指向当前扫描结点
int j=1;//当前p指向的是第几个结点
P=L;//L指向头结点,头结点是第0个结点,不存放数据
if(p!=NULL&&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;
}
//在p结点之后插入元素e
bool InsertNextNode(LNode *p,int e){
if(p==NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
if(s==NULL)
return false;//内存分配失败
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//在p结点之前插入元素e
bool InsertPriorNode(LinkList &L,LNode *p;int e){
循环查找p的前驱q,再对q进行后插
}
法二:
bool InsertPriorNode(LNode*p,int e){
if(p=NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e
return true;
}