2.无空头链表:
带头结点单链表无论在第一个数据元素结点前插入,还是在其他结点前插入,操作方法一样;而不带头结点单链表在第一个数据元素结点前插入,和在其他结点前插入,操作方法不一样。
删除操作和插入操作类似。
参考:本人上篇博客
//创建链表 ,在链表中添加一个数据 头添加
void AddListHead(int a)
{
//创建节点
struct Node * pTemp =(struct Node*)malloc(sizeof(struct Node));
//赋值
pTemp->a=a;
pTemp->pNext=NULL;
//接在链表上
if (g_Head==NULL || g_End==NULL)
{
//链表什么都没有,来的节点就是头节点,也是尾节点
g_Head=pTemp;
g_End=pTemp;
}
else
{
//链表不为空,来的一个节点接在头节点后面,头节点要往前移动
pTemp->pNext=g_Head;
g_Head=pTemp;
}
}
代码:代码下载
3.循环单链表
其结构特点:链表中最后一个结点的指针域指向整个链表的第一个结点,从而使链表形成一个环。优点是从链尾到链头比较方便,也有带头结点和不带头结点两种结构。
程序设计:
p!=NULL 改为 p!=head
P->next!=NULL 改为 p- >next != head