正向创建链表,即采用”尾插法“。
数据集合:
10 | 20 | 30 | 40 | 50 | 60 |
目标:按数组的值,单向正向创建一个链表。
主要算法,
1.创建头结点
2.创建其他节点
分析结构
1.链表数据结构
typedef struct Node{
int data;//数据域
struct Node *next;//指针域
}linkList;//别名
2.初始化链表结构
linkList* initLink(int *a,int n)//数组,以及长度,返回一个头结点
3.输出链表
void printLink(linkList* head)
源码分析
#include<stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}linkList;
linkList* initLink(int *a,int n){
linkList *h,*newp,*t;
h=t=(linkList*)malloc(sizeof(linkList));//开辟内存空间,初始化头结点
h->data = a[0];//此头结点的数据域有值
int i;
for(i=1;i<n;i++){
newp=(linkList*)malloc(sizeof(linkList));
newp->data = a[i];
newp->next = NULL;
t->next=newp;
t=newp;
}
return h;
}
void printLink(linkList* head){
linkList* p;
for(p=head;p!=NULL;p=p->next){
printf("%d\n",p->data);
}
}
int main(void){
int a[6]={1,2,3,4,5,6};
linkList * head;
head=initLink(a,6);
printLink(head);
return 0;
}
另附头结点不带值得源码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data ;
struct Node *next;
}linkList;
linkList* initLink(int *a,int n){
linkList *h,*newp,*t;
int i;
for(i=0;i<n;i++){
newp = (linkList*)malloc(sizeof(linkList));
newp->data=a[i];
newp->next=NULL;
if(i==0){
h=t=newp;
}
t->next=newp;
t=t->next;
}
return h;
}
void printLink(linkList* head){
linkList* p;
for(p=head;p!=NULL;p=p->next){
printf("%d\n",p->data);
}
}
int main(void){
int a[6]={1,2,3,4,5,6};
linkList * head;
head=initLink(a,6);
printLink(head);
return 0;
}
输出结果:
1
2
3
4
5
6