[LeetCode] Merge k Sorted Lists
来源:互联网 发布:qq三国奥义感悟的算法 编辑:程序博客网 时间:2024/05/16 06:25
先merge两个list,注意在merge完之后可以delete掉原来的指针,释放内存
之后在k个listmerge中,用front和rear从头到尾merge,注意merge的list放在front的位置,循环被破坏的条件是front>rear(奇数)front==rear(偶数)这两种情况下,rear都是不用变化的,front指向0即可,当rear==0时返回
注意即时释放内存
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { vector<ListNode*>::size_type sz = lists.size(); if(sz==0) return NULL; if(sz==1) return lists[0]; vector<ListNode*>::size_type front = 0; vector<ListNode*>::size_type rear = lists.size()-1; ListNode *p1; ListNode *p2; while(front < rear){ p1 = lists[front]; p2 = lists[rear]; lists[front] = mergeTwo(p1,p2); ++front,--rear; delete p1; delete p2; if(rear == 0) return lists[0]; if(front>=rear) front =0; } } ListNode* mergeTwo(ListNode *l1, ListNode *l2){ ListNode *Head=NULL; ListNode *p=NULL; while(l1!=NULL||l2!=NULL){ int tmp; if(l1!=NULL&l2!=NULL) { if(l1->val <l2->val){ tmp=l1->val; l1 = l1->next; } else{ tmp = l2->val; l2 = l2->next; } } else if(l1==NULL){ tmp = l2->val; l2 = l2->next; } else{ tmp = l1->val; l1= l1->next; } ListNode *p2 = new ListNode(tmp); if(Head ==NULL) Head = p2; else p->next = p2; p = p2; } return Head; }};
0 0
- LeetCode: Merge k Sorted Lists
- LeetCode Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge K sorted lists
- [LeetCode]Merge k Sorted Lists
- [LeetCode] Merge k Sorted Lists
- LeetCode-Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- LeetCode - Merge k Sorted Lists
- LeetCode | Merge k Sorted Lists
- 【leetcode】Merge k Sorted Lists
- Leetcode: Merge k Sorted Lists
- <Leetcode>Merge k Sorted Lists
- [LeetCode] Merge K sorted lists
- [LeetCode] Merge k Sorted Lists
- 【Leetcode】Merge k Sorted Lists
- Reverse Linked List
- 快速排序
- springmvc之@Controller、@RequestMapping等注解讲解
- from __future__ import absolute_import
- Embedded_SW_模块化]嵌入式C语言工程文件组织_保持更新
- [LeetCode] Merge k Sorted Lists
- 内幕视角揭秘那些年的微软和诺基亚
- Windows进程内部堆的操作
- 大整数乘法
- Java中super应用
- Count Primes -- leetcode
- android支付平台集成调研
- 黑马程序员——JAVA基础---多线程
- 文章标题