面试中经常碰到要创建链表的题目,今天做个小总结:
1.创建链表(头插法)
该程序完成了建立个各节点的链表,并将链表数据初始化为整数的程序,且该链表为无头结点的链表,代码如下:
#include <math.h>
typedef int datatype; //假设建立的链表数据整型数据
typedef struct node //定义节点
{ datatype data;
struct node * next;
}linklist;
linklist * creat(linklist * head,int n)
{ linklist * p;
int i;
srand(time(0)); //初始化随机数种子
head=NULL;
for(i=0;i<n;i++)
{ p=(linklist *)malloc(sizeof(linklist)); //生成一个新节点,并返回节点指针
p->data=rand()%100; //给节点数据赋初值
p->next=head;
head=p;
}
return head;
}
//VC++运行正常,输入字符型数据来创建节点,以‘#’来结束创建。
#include <stdio.h>
#include <math.h>
typedef char datatype; //假设建立的链表数据整型数据
typedef struct node //定义节点
{ datatype data;
struct node * next;
}linklist;
linklist * creatlist(linklist * head); //声明创建链表的函数
main()
{ linklist * q;
linklist * head;
printf("请输入字符来创建链表,以'#'来结束:\n");
q=creatlist(head);
while(q->next!=NULL)
{ printf("\n %c",q->data);
q=q->next;
printf("\n");
}
}
linklist * creatlist(linklist * head)
{ char ch;
linklist * p;
linklist * e; //定义指向尾部的指针
head=NULL;
e=NULL;
ch=getchar();
while('#'!=ch)
{ p=(linklist *)malloc(sizeof(linklist)); //生成新节点并返回节点指针
p->data=ch; //给节点数据赋初值
if(NULL==head)
head=p;
else
e->next=p;
e=p;
ch=getchar();
}
if(NULL!=e)
e->next=NULL;
return head;
}