单链表的分割
将一个单链表以某个元素基准分割为两个链表
提示:
1输入若干数值创建一一个单链表(-1表示结束)
2输出该初始单链表
3输入一一个基准值X
4分割为两个单链表(一个单链表的元素值均小于基准,另一个单链表的元素值均大于等于基准)
5输出分割后的两个链表
如何做好单链表的分割
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- qzjhjxj 2023-03-16 22:09关注
供参考:
#include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LinkNode; void InitList(LinkNode **L) { (*L) = (LinkNode *)malloc(sizeof(LinkNode)); (*L)->next = NULL; } void CreateList(LinkNode *L) { LinkNode *p = L,*pt = NULL; ElemType x; printf("输入若干数值创建一个单链表(-1表示结束):"); while(1){ scanf("%d", &x); if (x == -1) break; pt = (LinkNode *)malloc(sizeof(LinkNode)); pt->next = NULL; pt->data = x; p->next = pt; p = pt; } } void DispList(LinkNode *L) { LinkNode *p = L->next; while(p != NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); } void Split1(LinkNode *L1, LinkNode *L2) { ElemType x; LinkNode *pL1 = L1,*pnL1 = L1->next,*pL2 = L2,*pL = NULL; printf("输入一个基准值x:"); scanf("%d", &x); while(pnL1 != NULL){ pL = pnL1; pnL1 = pnL1->next; pL->next = NULL; if(pL->data < x){ pL1->next = pL; //链表 L1 ,元素值 < 基准值 pL1 = pL; } else{ pL2->next = pL; //链表 L2 ,元素值 >= 基准值 pL2 = pL; } } } int main() { LinkNode *L1,*L2; InitList(&L1); InitList(&L2); CreateList(L1); DispList(L1); Split1(L1, L2); DispList(L1); DispList(L2); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
- ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
- ¥15 MATLAB中streamslice问题
- ¥15 如何在炒股软件中,爬到我想看的日k线
- ¥15 seatunnel 怎么配置Elasticsearch
- ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
- ¥15 (标签-MATLAB|关键词-多址)
- ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
- ¥500 52810做蓝牙接受端
- ¥15 基于PLC的三轴机械手程序