不带头结点的单链表,递归法比较简明!(必背!)
单链表的结构:
typedef struct node{ int data; struct node *next; }*List,Node;
创建
第一种方法:递归的终止条件:e为0
void CreatList(List &T) { int e;
cin>>e; if(e==0) T=NULL; else { T=(List)malloc(sizeof(Node)); T->data=e; CreatList(T->next); } }
第二种方法,创建n个节点,中止条件:n==0
1 void CreatList(List &L,int n) 2 { 3 int a; 4 if(n==0) 5 { 6 L=NULL; 7 } 8 else 9 { cin>>a; 10 L=(List)malloc(sizeof(Node)); 11 L->data=a; 12 CreatList(L->next,--n); 13 } 14 }
遍历
void Traverse(List &L) { if(L) { cout<<L->data<<" "; Traverse(L->next); } }
查找
int GetElem(List &L,int e)/* 0成功,-1失败*/ { while(L) { if(L->data==e) return 0; L=L->next; } return -1; }
销毁
void DestoryList(List &L) { if(L) { DestoryList(L->next); free(L); L=NULL; } }