带头结点的线性链表基本操作以及归并操作
程序员文章站
2024-03-21 16:23:46
...
Status DelFirst_E(ELinkList *L, Link h, Link *q)
{
*q = h->next;
if(*q) //链表非空
{
h->next = (*q)->next;
if(!h->next) //h后只有一个结点
(*L).tail = h;
(*L).len--; //并不释放被删结点所占空间
return OK;
}
return ERROR;
}
void Append_E(ELinkList *L, Link s)
{
int count = 0;
(*L).tail->next = s;
while(s) //考虑s为空的情况
{
(*L).tail = s;
s = s->next;
count++;
}
(*L).len += count;
}
Status Remove_E(ELinkList *L, Link *q)
{
Link p;
if(!(*L).len)
{
*q = NULL;
return ERROR;
}
*q = (*L).tail;
p = (*L).head; //寻找尾结点的前驱
while(p->next!=(*L).tail)
p = p->next;
p->next = NULL;
(*L).tail = p;
(*L).len--;
return OK;
}