编辑代码

#include<stdio.h>
#include <stdlib.h>
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

bool InitList(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    L->next =NULL;
    return true;

}
//头插法建立单链表
void CreateByHead(LinkList &L,int n){
    L=(LinkList)malloc(sizeof(LNode));
    L->next =NULL;
    int i;
    //printf("请输入要插入的个数%d",n);
    for(i=0;i<5;i++){
        LNode *p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
    }
}
//尾插法建立单链表
void CreateByTail(LinkList &L,int n){
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    LNode *r=L;
    for(int i=0;i<5;i++){
        LNode *p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=NULL;
        r->next=p;
        r=p;

    }
}
//输出单链表长度
int  GetLength(LinkList L){
    LNode *p;
    p=L->next;
    int len=0;
    while(p){
        ++len;
        p=p->next;
    }
    return len;
}
//按位取值
LNode *GetElemBySide(LinkList &L,int i){
    if(i<1) return 0;
    int j=1;
    LNode *p=L->next;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    return p;
}
//按值查找
LNode *GetElemByLocate(LinkList &L,int e){
    LNode *p=L->next;
    while(p&&p->data!=e)
    p=p->next;
    return p;
}
//输出
void print(LinkList L)
{
	LNode *p;
	p = L->next;  //p的值为首元结点地址值,进而一开始就指向首元结点
	while(p)    //循环条件是下一个结点地址为空结束 
	{
		printf("%d ",p->data);
		p = p->next;   //继续指向下一个结点	
	}
} 
int main(){
    LinkList L;   
   // CreateByHead(L,5);
    CreateByTail(L,5);
    print(L);
  int i=GetLength(L);
  printf("获取长度\n");
  printf("\n%d",i);
  LNode *s=GetElemBySide(L,2);
  printf("\n%d",s->data);
  LNode *t=GetElemByLocate(L,45);
  printf("%d",t);
}