单链表的整表创建
单链表整表创建的算法思路
1、声明一个结点node和计数器变量i
2、初始化一空链表L
3、让L的头结点的指针指向NULL,即建立一个带头结点的单链表
4、循环实现后继结点的赋值和插入
头插法建立单链表
头插法从一个空表开始,生成新结点,读取数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。
下面是实现代码
void CreateListHead(LinkList *L, int n)
{
LinkList node;
int i;
srand(time(0)); // 初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for(i=0; i < n; i++)
{
node = (LinkList)malloc(sizeof(Node)); // 生成新结点
node->data = rand()%100+1; // 1-100随机数存放在node的数据域
node->next = (*L)->next; // 新插入结点的指针域指向上一次插入的结点
(*L)->next = node; // 头结点的指针域指向新插入的结点
}
}
尾插法建立单链表
实现代码
void CreateListTail(LinkList *L, int n)
{
LinkList node, link_list;
int i;
srand(time(0)); // 初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));
link_list = *L; // 将申请的结点用r表示
for(i=0; i < n; i++)
{
node = (Node *)malloc(sizeof(Node)); // 生成新结点
node->data = rand()%100+1; // 1-100随机数存放在node的数据域
link_list->next = node; // link_list的指针域指向node
link_list = p; // 当前的node接替link_list的作用
}
link_list->next = NULL; // 结尾
}
单链表的整表删除
单链表的整表删除算法思路
1、声明结点p和q
2、将第一个结点赋值给p,下一个结点赋值给q
3、循环执行释放p和q赋值给p的操作
Status ClearList(LinkList *L)
{
LinkList p, q;
p = (*L)->next;
while(p)
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}