1.循环单链表和单链表的区别在于链表中最后一个结点的指针不是指向NULL,而是指向头结点,这样链表结点就形成了一个环。循环单链表是一个环,所以在链表中任意位置插入或者删除结点时都是等价的,不需要根据所操作结点是否是尾结点分类讨论,因此简化了代码。
2.下面是循环单链表的具体操作详细代码,由c语言实现。
#include<stdio.h>
#include<malloc.h>
#define ElemType int
typedef struct LinkNode{
ElemType data;
struct LinkNode *pNext;
}LinkNode;
LinkNode *pHead = NULL; //单向链表的头指针
LinkNode *pEnd = NULL; //单向链表的尾指针
//创建单向链表节点
void CreateNode(LinkNode *pNode)
{
if(NULL != pNode)
{
printf("请输入结点数据:");
scanf("%d", &pNode->data);
}
pNode->pNext = NULL;
}
//创建单向链表(带头节点),可以理解为创建一个空表,创建的链表中只包含一个头结点
void CreateLinkList()
{
LinkNode *pNew = malloc(sizeof(LinkNode));
pNew->data = NULL; //头结点不放元素
pNew->pNext = NULL;
pHead = pNew;//将头、尾指针都指向头结点
pEnd = pNew;
pEnd->pNext = pHead;
printf("创建链表成功!\n");
}
//添加结点,结点后面依次按顺序添加,注意与后面的插入结点区分开
void AddNode()
{
LinkNode *pNew = malloc(sizeof(LinkNode));
CreateNode(pNew);
pEnd->pNext = pNew;
pEnd = pNew;
printf("添加结点成功!\n")