c语言数据结构,将两个单链表合成一个单链表求集合(皆为非降序),希望给出可以在dev中运行的代码 并给出详细解释,请指教
6条回答 默认 最新
- 日向晚,声声慢 2022-10-02 14:15关注
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node* next; }Node_t; //开辟节点并初始化 Node_t* AollcNode(int x) { Node_t* p = (Node_t*)malloc(sizeof(Node_t));//新建一个节点 //初始化 p->data = x; p->next = NULL; return p; } //合并 void MergeList(Node_t* head, Node_t* head1, Node_t* head2) { Node_t* p = head; Node_t* p1 = head1->next;//指向第一个节点 Node_t* p2 = head2->next;//指向第一个节点 while (p1 && p2) { if (p1->data <= p2->data) { p->next = p1; p1 = p1->next; } else { p->next = p2; p2 = p2->next; } p = p->next;//指向新的节点,起到连接下一个节点的左右 } //链表2还有数据 if (p1 == NULL) { p->next = p2; } //链表1还有数据 if (p2 == NULL) { p->next = p1; } } //尾插入创建链表 void InintList(Node_t* head, Node_t** end) { int i = 0; int x = 0; Node_t* p = NULL; printf("输入链表长度:>"); int n = 0; scanf("%d", &n); for (; i < n; i++) { scanf("%d", &x); p = AollcNode(x); (*end)->next = p; *end = p; } } void ShowNode(Node_t* head) { Node_t* p = head->next; while (p) { printf("%d->", p->data); p = p->next; } printf("NULL\n"); } int main() { Node_t* head1 = AollcNode(0); Node_t* head2 = AollcNode(0); Node_t* head3 = AollcNode(0);//合并后的tou printf("初始化链表1\n"); Node_t* end1 = head1; //因为要记录结尾,要改变尾指针的指向要传址调用 InintList(head1, &end1); ShowNode(head1); printf("初始化链表2\n"); Node_t* end2 = head2; //因为要记录结尾,要改变尾指针的指向要传址调用 InintList(head2, &end2); ShowNode(head2); printf("合并后:>"); MergeList(head3, head1, head2); ShowNode(head3); free(head1); free(head2); free(head3); head1 = NULL; head2 = NULL; head3 = NULL; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大