C++怎么实现3个链表排序整合到一起
C++实现3个链表排序整合到一起的方法有很多,下面介绍一种常用的方法,即利用归并排序的思想:
1.首先,定义一个空的链表,用来存储排序后的结果;
2.将3个链表的头结点分别赋值给3个指针,比较这3个指针指向的结点的值,将较小的结点值插入到空链表中;
3.将较小的结点插入到空链表中后,将该指针后移一位,继续比较,直到3个链表中的结点都比较完;
4.重复上述步骤,直到3个链表中的结点都被比较完,空链表中就是排序后的结果。
下面是C++实现3个链表排序整合到一起的代码:
// 定义链表结构 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; // 合并3个链表 ListNode* mergeThreeLists(ListNode* l1, ListNode* l2, ListNode* l3) { ListNode* dummy = new ListNode(0); ListNode* cur = dummy; ListNode* p1 = l1; ListNode* p2 = l2; ListNode* p3 = l3; while (p1 != NULL || p2 != NULL || p3 != NULL) { int val1 = p1 == NULL ? INT_MAX : p1->val; int val2 = p2 == NULL ? INT_MAX : p2->val; int val3 = p3 == NULL ? INT_MAX : p3->val; int minVal = min(min(val1, val2), val3); if (minVal == val1) { cur->next = p1; p1 = p1->next; } else if (minVal == val2) { cur->next = p2; p2 = p2->next; } else { cur->next = p3; p3 = p3->next; } cur = cur->next; } return dummy->next; }
以上就是C++实现3个链表排序整合到一起的方法,利用归并排序的思想,将3个链表的结点按照从小到大的顺序插入到空链表中,最终得到排序后的结果。
相关文章