你的定义就有点问题,我给你一个链表基本操作的程序代码吧,希望对你有所帮助
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
//****************************************************************************
LinkList CreateList()//头插入法 建立带头节点的链表
{
LinkList L;
LinkList P;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立空链表
printf("请输入第一个元素并以0作为输入结束的标志\n");
scanf("%d",&x);
while(x!=0)//以输入0作为输入结束标志
{
P=(LinkList)malloc(sizeof(LNode));
P->data=x;
P->next=L->next;
L->next=P;
scanf("%d",&x);
}
return L;
}
int Listlength_L(LinkList L)//求表长
{
LinkList P;
P=L;
int i=0;
while(P->next!=NULL){i++;P=P->next;}
return i;
}
LinkList Get_LinkList(LinkList L,int i)//按序号查找
{
LinkList P=L;
int j=0;
while(jnext!=NULL)
{j++;P=P->next;}
if(i==j)return P;
else return NULL;
}
LinkList Locate_LinkList(LinkList L,ElemType e)//按值查找
{
LinkList P=L;
while(P->next!=NULL&&P->data!=e)P=P->next;
return P;
}
LinkList ListInsert1(LinkList L,int i,ElemType e)//在第i个节点前插入新元素e
{
int j=0;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));//切记 一定要为s分配内存
s->data=e;
p=L;
while(p!=NULL&&j
//if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
return L;
}
LinkList ListInsert2(LinkList L,int i,ElemType e)//在第i个节点后插入新元素e
{
int j;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));
s->data=e;
p=L->next;
if(i==0)
{
s->next=L->next;L->next=s;
}
else
{
for(j=0;j
if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
}
return L;
}
LinkList ListDelete(LinkList L,int i,ElemType e)//删除第i个节点,把删除的值放在e中
{
int j;
LinkList p;
p=L;
for(j=0;j
if(p==NULL||j>=i){printf("参数i有误");exit(1);}
e=p->next->data;
p->next=p->next->next;
return L;
}
void display(LinkList L)//遍历链表L
{
LinkList p;
p=L->next;
while(p){printf("%d ->",p->data);p=p->next;}
printf("\b\b \n");
}
int main()
{
}