赞
踩
1>参数:链表
2>返回值:void
3>函数代码如下:
- //排序
- void list_sort(NodePtr L)
- {
- if (L == NULL || L->next == NULL)
- {
- printf("排序失败\n"); // 空链表或只有一个节点的链表,无需排序
- return;
- }
-
- NodePtr p = L->next; // p指向第一个需要排序的节点
- L->next = L->next->next; // 假设第一个节点是已排序的,将其从待排序链表中移除
- p->next = NULL; // 断开p的链接,使其成为独立节点
-
- while (p != NULL)
- {
- NodePtr q = L; // q用于遍历已排序的链表
- NodePtr prev = NULL; // prev用于记录q的前一个节点
-
- // 寻找p应该插入的位置
- while (q != NULL && q->data < p->data)
- {
- prev = q;
- q = q->next;
- }
-
- // 插入p到正确位置
- p->next = q;
- if (prev == NULL)
- {
- // 插入到链表头部
- L->next = p;
- }
- else
- {
- prev->next = p;
- }
-
- // 处理下一个待排序节点
- NodePtr next_p = p->next; // 保存p的下一个节点
- p->next = NULL; // 断开p的链接,准备下一次循环
- p = next_p; // 移动到下一个待排序节点
- }
- printf("排序成功\n");
- }
1>参数:链表
2>返回值:链表
3>函数代码如下:
- //将链表进行翻转(递归版)
- NodePtr list_un_reverse(NodePtr L)
- {
- if(L == NULL || L->next==NULL)
- {
- return L;
- }
- NodePtr p=list_un_reverse(L->next);
- L->next->next=L;
- L->next=NULL;
- return p;
- }
1>参数:链表
2>返回值:void
3>函数代码如下:
- //去重
- void list_qu(NodePtr L)
- {
- if(NULL==L || list_empty(L))
- {
- printf("去重失败\n");
- return;
- }
- NodePtr mark=NULL;
- NodePtr p=NULL;
- NodePtr q=NULL;
- for(mark=L->next;mark!=NULL;mark=mark->next)
- {
- q=mark;
- p=mark->next;
- while(p)
- {
- if(mark->data==p->data)
- {
- q->next=p->next;
- free(p);
- p=q->next;
- }else
- {
- q=p;
- p=p->next;
- }
- }
- }
- printf("去重成功\n");
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。