根据位置查找
LinkListPtr list_search_pos(LinkListPtr L, int pos)
{
if(NULL == L || list_empty(L))
{
puts("memory error!");
return NULL;
}
if(pos < 0 || pos > L->len)
{
puts("pos error!");
return NULL;
}
LinkListPtr q = L;
for(int i = 0; i < pos; i++)
{
q = q->next;
}
return q;
}
根据数据查找
int list_search_value(LinkListPtr L, datatype value)
{
if(NULL == L || list_empty(L))
{
puts("memory error!");
return -1;
}
int flag = 0;
int count = 1;
LinkListPtr q = L->next;
while(q != NULL)
{
if(value == q->data)
{
printf("该数据存储于链表的第%d个节点\n", count);
flag++;
}
q = q->next;
count++;
}
if(0 == flag)
{
puts("表内没有此数据");
}
return 0;
}
链表的升序排序
int list_sort(LinkListPtr L)
{
if(NULL == L || list_empty(L))
{
puts("memory error!");
return -1;
}
LinkListPtr q1 = L->next;
LinkListPtr q2 = NULL;
LinkListPtr pmin = NULL;
char temp = 0;
while(q1 != NULL)
{
q2 = q1;
pmin = q2;
while(q2 != NULL)
{
if(pmin->data > q2->data)
{
pmin = q2;
}
q2 = q2->next;
}
if(q1 != pmin)
{
temp = pmin->data;
pmin->data = q1->data;
q1->data = temp;
}
q1 = q1->next;
}
return 0;
}
单链表逆序(递归)
LinkListPtr list_reverse(LinkListPtr L)
{
if(L->next == NULL)
{
return L;
}
LinkListPtr NL = list_reverse(L->next);
L->next->next = L;
L->next = NULL;
return NL;
}