链表去重函数:
//链表去重
void list_unique(NodePtr L)
{
if(NULL == L || L->len<2)
{
printf("去重失败\n");
return;
}
int seen[100001] = {0};
NodePtr H = L;
NodePtr p = NULL;
while(H->next)
{
if(seen[H->data])
{
p->next = H->next;
free(H);
H = p->next;
L->len--;
}
else
{
seen[H->data] = 1;
p = H;
H = H->next;
}
}
printf("去重成功\n");
}
链表排序函数:
//链表排序
void list_sort(NodePtr L)
{
if(NULL == L || L->len<2)
{
printf("排序失败\n");
return;
}
NodePtr p1,p2;
for(int i = 1;i < L->len; i++)
{
p1=L->next;
for(int j = 1;j < L->len-i+1; j++)
{
p2=p1->next;
if(p1->data < p2->data)
{
datatype temp = p1->data;
p1->data = p2->data;
p2->data = temp;
}
p1 = p1->next;
}
}
printf("排序成功\n");
}
递归实现链表反转: