#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode , *LinkList;
void InitList(LNode *L);//初始化一个单链表
LinkList CreateLinkList();//尾插法创建单链表
void VisitedLinkList(LinkList L);//顺序遍历单链表并打印每个节点的值
int Length(LinkList L);//计算单链表的表长
int SearchbyNode(LinkList L, int i);//得出第i个节点的值
void ListInsert(LinkList L,int i,int e);//在第i个节点插入一个值为e的新节点
int main(){
LinkList L;
L=CreateLinkList();
//printf("单链表的表长是%d\n",Length(L));
printf("第3个节点的值为%d\n",SearchbyNode(L,3));
ListInsert(L,3,100);
printf("第3个节点的值为%d\n",SearchbyNode(L,3));
VisitedLinkList(L);
return 0;
}
void InitList(LNode *L){
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL){
printf("内存分配出错,初始化失败\n");
exit(0);
}
L->next=NULL;
}
LinkList CreateLinkList(){
LNode* L;
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL){
printf("内存分配出错,创建链表失败\n");
}
L->next=NULL;
LNode *p,*q;
q=L;
int x;
printf("请输入要插入的值:\n");
scanf("%d",&x);
while(x!=9999){
p=(LNode*)malloc(sizeof(LNode));
p->data=x;
q->next=p;
q=p;
printf("请输入要插入的值:\n");
scanf("%d",&x);
}
q->next=NULL;
return L;
}
void VisitedLinkList(LinkList L){
LNode *p=L->next;
int i=1;
while(p!=NULL){
printf("第%d个节点的值是%d\n",i++,p->data);
p=p->next;
}
}
int Length(LinkList L){
int i=0;
LNode *p=L->next;
while(p!=NULL){
i++;
p=p->next;
}
return i;
}
int SearchbyNode(LinkList L ,int i){
int len=Length(L);
if(i>len||i<0){
printf("输入的i的值有误");
exit(0);
}
LNode *p=L;
int j=1;
for(j=1;j<=i;j++){
p=p->next;
}
return p->data;
}
void ListInsert(LinkList L,int i,int e){
LNode *p,*q=L;
if(i<0||i>Length(L)){
printf("输入的i的值错误\n");
exit(0);
}
p=(LNode*)malloc(sizeof(LNode));
if(p==NULL){
printf("内存不足,请重试");
exit(0);
}
p->data=e;
int j=1;
for(j=1;j<i;j++){
q=q->next;
}
p->next=q->next;
q->next=p;
}
12-24
1万+