求几个有关链表的最基本算法

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:01:44
1、循环链表长度算法
2、双向链表插入删除元素算法
3、逆转线性单链表算法
4、逆转循环链表算法
5、逆转双向链表的算法

不需要很详细的可执行代码,只要最主要的部分就可以了,用C语言,谢谢

这个也太多了!
1.循环单链表,且含有头结点的
p = head->next;
for(len=0;p->next!=head;p=p->next)
{
len++ //长度加1
}
2.插入
Status ListInsert(DuLinkList L, int i, ElemType e)
{
DuLinkList p, s;
//i值不合法
if(i < 1 || i > ListLength(L) + 1) return ERROR;

//在L中确定第i个元素前驱的位置指针p
p = GetElemP(L, i - 1);

//p=NULL,即第i个元素的前驱不存在(设头结点为第1个元素的前驱)
if(!p) return ERROR;

//给插入的数据分配空间
s = (DuLinkList)malloc(sizeof(DuLNode));

//如果为空,分配失败
if(!s) return OVERFLOW;

//在第i-1个元素之后插入
s->data = e;
s->prior = p;
s->next = p->next;
p->next->prior = s;
p->next = s;

return OK;
}
删除
Status ListDelete(DuLinkList L,int i,ElemType *e)
{
DuLinkList p;

// i值不合法
if(i < 1) return ERROR;

// 在L中确定第i个元素的位置指针p
p = GetElemP(L, i);

// p=NULL,即第i个元素