//线性表 之 链表的头插,尾插建立,及链表的长度
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int Status;
typedef int ElemType;
int count;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList build()//创建结点
{
LinkList q;
q=(LinkList)malloc(sizeof(LNode));
q->next=NULL;
return q;
}
void CreateLink1(LinkList &L,int n)//尾插法建立
{
int i,x;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
p=L;//先建立一个带头结点的单链表
for(i=0;i<n;i++)
{
q=build();
scanf("%d",&x);
q->data=x;
p->next=q;
p=q;
}
q->next=NULL;
}
void CreateLink2(LinkList &L,int n)//头插法建立
{
int i,x;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
p=L;//先建立一个带头结点的单链表
for(i=0;i<n;i++)
{
q=build();
scanf("%d",&x);
q->data=x;
q->next=p->next;
p->next=q;
}
}
Status LengthLink(LinkList &L)
{
count=0;
L=L->next;
while(L)
{
count++;
L=L->next;
}
return count;
}
int main()
{
int n;
printf("创建链表:输入n及n个数\n");
scanf("%d",&n);
LinkList p,root;
CreateLink2(p,n);
root=p;
p=p->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
p=root;
int k=LengthLink(p);
printf("链表的长度%d\n",k);
return 0;
}