不带头结点单链表实现
#include <stdio.h>
#include <stdlib.h>
#define null NULL
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}node,*LinkList;
bool InitList(LinkList *L){
(*L)=NULL;
return true;
}
bool IsEmpty(LinkList L){
return (L==NULL);
}
bool PrintList(LinkList L){
Elemtype e;
node *tem=L;
while(tem!=null){
e=tem->data;
tem=tem->next;
printf("%d ",e);
}
printf("\n");
return true;
}
bool CreateFromHead(LinkList *L){
int flag=1;
Elemtype ch;
node *tem;
while(flag){
scanf("%d",&ch);
if(ch!=9999){
tem=(node*)malloc(sizeof(node));
if(tem==null){
return false;
}
tem->data=ch;
tem->next=(*L);
(*L)=tem;
}
else{
flag=0;
}
}
return true;
}
bool CreateFromTail(LinkList *L){
int flag=1;
Elemtype ch;
node *tem,*p;
while(flag){
scanf("%d",&ch);
if(ch!=9999){
tem=(node*)malloc(sizeof(node));
if(tem==null){
return false;
}
tem->data=ch;
if((*L)==null){
(*L)=tem;
p=(*L);
}
p->next=tem;
tem->next=null;
p=tem;
}else{
p->next=null;
flag=0;
}
}
return true;
}
bool GetElem(LinkList L,int index,Elemtype *e){
node *tem=L;
int i=1;
while(i<index&&tem!=null){
tem=tem->next;
i++;
}
if(i==index){
*e=tem->data;
return true;
}
return false;
}
bool LocalElem(LinkList L,int *index,Elemtype e){
node *tem=L;
int i=1;
while(tem!=null&&L->data!=e){
tem=tem->next;
i++;
}
if(L==null){
return false;
}
*index=i;
return true;
}
bool InsertList(LinkList *L,int index,Elemtype e){
node *tem;
node *p=*L;
if(index<1||L==null){
return false;
}
int i=1;
while(i<index-1&&p!=null){
p=p->next;
i++;
}
if(p==null){
return false;
}
tem=(node*)malloc(sizeof(node));
if(tem==null){
return false;
}
tem->data=e;
if(p==*L){
tem->next=*L;
*L=tem;
}else{
tem->next=p->next;
p->next=tem;
}
return true;
}
bool DelList(LinkList *L,int index,Elemtype *e){
node *p=*L;
int i=1;
if(index<1||*L==null){
return false;
}
while(p!=null&&i<index-1){
p=p->next;
i++;
}
if(p==null){
return false;
}
node *tem;
if(p==(*L)){
*L=p->next;
*e=p->data;
}else{
*e=tem->data;
tem=p->next;
p->next=tem->next;
}
free(tem);
return true;
}
bool ReverseList(LinkList L){
node *NewList;
if(InsertList(NewList)){
node *tem;
while(L!=null){
if(NewList==null){
NewList=L;
L=L->next;
}else{
tem=L->next;
L->next=NewList;
L=tem;
}
}
}
else{
return false;
}
return true;
}
int main(){
LinkList L;
InitList(&L);
PrintList(L);
CreateFromTail(&L);
PrintList(L);
int e;
DelList(&L,1,&e);
printf("%d",e);
}