今天实现单链表的初始化,遍历时,都遇到了一些问题,觉得比较有意义,所以,提笔记录下吧~~
- 链表定义
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
- 初始化
void InitList(LinkList* L){
//分配头结点//LNode!!!!!!
*L=(LNode*)malloc(sizeof(LNode));
(*L)->next=NULL;
//insert elements
int length;
printf("please input the linklist's length:");
scanf("%d",&length);
printf("please input the linklist's num:");
LNode *p,*q;
ElemType e;
q=*L;
//insert start
for(int i=0;i<length;i++){
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&e);
p->data=e;
q->next=p;
q=p;
}
p->next=NULL;
}
初始化注意
1.分配头结点时,要将头结点定义为结构体类型,分配的size也为结构体的大小
2.因为在定义的时候我们也实现了初始化,因此,在传递参数时,我们要以地址为形参。
- 链表遍历
void traverse(LinkList L){
LinkList p;
p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
遍历时,不需要传参数,因为不涉及链表数值的更改。
总结:
1.插入删除需要传递指针,遍历查询不需要指针