代码参考王道408
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>//注意这里要加上stdbool.h头文件,不然不能使用bool/true/false关键字
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
bool ListInsert(LNode *L,int i,int e){//链表插入节点
LNode *p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListDelete(LNode *L,int i,int *e){//链表删除节点
LNode *p=L;
int j=0;
while(p!=0&&j<i-1){
p=p->next;
j++;
}
if(p==NULL||p->next==NULL)
return false;
LNode *s=p->next;
*e=s->data;
p->next=s->next;
free(s);
return true;
}
//头插法建立单链表
LNode *List_HeadInsert(LNode *L){
LNode *s;
int x;
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表
LNode *List_TailInsert(LNode *L){
int x;
L=(LNode *)malloc(sizeof(LNode));
LNode *s,*r=L;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
void show(LNode *L){
LNode *p=L->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
}
int main() {
LNode *L;
//L = List_HeadInsert(&L); // 调用头插法建立单链表
// 或者使用尾插法建立单链表:
L = List_TailInsert(&L);
show(L);
// 之后您可以在这里进行链表操作,如插入、删除等
return 0;
}
代码是在codeblocks中运行的,发现一点,函数不能使用引用方式传参,王道书上的代码在codeblocks上会报错,所以我根据大一学过的C语言语法修改了一下,全部使用的指针。