3、单链表的删除
list_delete 删除第I个链表,我们需要先找到他的前一个结点(即他的前驱)。
list_delete(linklist H,int pos)
{
linklist p, q;
if(pos == 0)
{
p = H;
}
else
{
p = Getlinklist(H, pos-1);
}
if(p == NULL || p->next == NULL)
{
printf("para is invalid\n");
return -1;
}
else
{
q = p->next;
p->next = q->next;
free(q);
q = NULL;
}
}
4、单链表的倒置
思路:依次取原链表中的各个结点,将其作为新链表首结点插入H结点之后。
void ReverseLinklist(linklist H)
void ReverseLinklist(linklist H)
{
linklist p, q;
p = H->next;
H->next = NULL;
while(p){
q = p;
p = p->next;
q->next = H->next;
H->next = q;
}
}
5、单链表的有序插入
list_orderinsert(linklist H,datatype value)
int list_orderinsert(linklist H, datatype value){
linklist p, q;
if((p = (linklist)malloc(sizeof(linknode))) == NULL)
{
printf("malloc failed\n");
return -1;
}
p->data = value;
q = H;
while(q->next && q->next->data < value){
q = q->next;
}
p->next = q->next;
q->next = p;
return 0;
}
6、单链表的排序
直接插入排序适用单链表排序。
void list_sort(linklist H);
{
linklist p, q, r;
p = H->next;
H->next = NULL;
while(p){
q = p;
p = p->next;
r = H;
while(r->next && r->next->data < q->data){
r = r->next;
}
q->next = r->next;
r->next =q;
}
}
7、单链表的其他操作
待补充 欢迎大家评论收藏。