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 高德地图点聚合中Marker的位置无法实时更新
- ¥15 DIFY API Endpoint 问题。
- ¥20 sub地址DHCP问题
- ¥15 delta降尺度计算的一些细节,有偿
- ¥15 Arduino红外遥控代码有问题
- ¥15 数值计算离散正交多项式
- ¥30 数值计算均差系数编程
- ¥15 redis-full-check比较 两个集群的数据出错
- ¥15 Matlab编程问题
- ¥15 训练的多模态特征融合模型准确度很低怎么办