#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
struct LNode {
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList,LNODE;
void ListInsert(LinkList L,int i,ElemType e);
int main(){
int i;
LinkList L;
for(i=1;i<3;i++)
{
ListInsert(L,i,i+1);
}
while(L!=NULL){
printf("%d ",L->data);
L=L->next;
}
return 0;
}
void ListInsert(LinkList L,int i,ElemType e){//插入
LinkList p=L,q;
q=(LinkList)malloc(sizeof(LNODE));
q->data=e;
if(i==1) L=q,q->next=NULL;
while(i>1){
p=p->next;
i--;
}
q->next=p->next;
p->next=q;
}
按题主提供的代码修改,这里是不带头结点的链表的插入,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
struct LNode {
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList,LNODE;
void ListInsert(LinkList* L,int i,ElemType e);
int main()
{
int i;
LinkList L = NULL,p;
for(i=0;i<5;i++)
{
ListInsert(&L,i+1,i+1);
}
ListInsert(&L,1,6);
p = L;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
system("pause");
return 0;
}
void ListInsert(LinkList* L,int i,ElemType e)//插入
{
int j;
LinkList pL,pLr,q;
if(i < 1) return;
for(j = 0,pLr = NULL,pL = (*L);pL && j < i-1;pLr = pL,pL = pL->next,j++);
q = (LinkList)malloc(sizeof(LNODE));
q->data = e;
q->next = NULL;
if((*L) == NULL || pLr == NULL ){ //,q->next=NULL; //i==1
q->next = pL; //whil(i>1){
(*L) = q; // p=p->next;
// i--;
}
else{
q->next = pLr->next;
pLr->next = q;
}
}