一:动态内存分配创建链表(链表的元素顺序向后添加)
分析:顺序向后添加的原理如下图所示,主要定义p、q两个指针
代码如下:
struct Node *CList(){ //创建链表,新节点总顺序向后
struct Node *head,*p,*q;
int ch;
head = (struct Node *) malloc(sizeof(struct Node));
head->next = NULL;
q = head;
scanf("%d",&ch);
while(ch!=9999){
p = (struct Node *) malloc(sizeof(struct Node)); //新建p节点
p->data = ch; //赋值
q->next = p;//连接链表
q = p;//q永远向前移动
scanf("%d",&ch);
}
q->next = NULL;
return head;
}
运行结果:
二:动态内存分配创建链表(新添加的节点老是在头结点之后)
分析:这种创建方式比较简单,head的指针域总是放着最新节点的地址。
代码如下:
struct Node *CreateList(){ //创建链表,新节点总在头结点之后
struct Node *head,*p;
int i;
head = (struct Node *) malloc(sizeof(struct Node));
head->next = NULL;
scanf("%d",&i);
while(i!=9999){
p = (struct Node *) malloc(sizeof(struct Node));
p->data = i;
p->next = head->next; //将最新创建节点的指针域指向原来头指针的下一个节点
head->next = p; //头指针指向最新创建的节点
scanf("%d",&i);
}
return head;
}
运行结果: