Skip to content

Commit 9237e01

Browse files
committed
daily code
1 parent 18c5e1c commit 9237e01

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
class compare
2+
{
3+
public:
4+
bool operator()(ListNode *l1,ListNode *l2){
5+
//if(!l1 || !l2)
6+
// return !l1;
7+
8+
if(l1 == NULL)return 1;
9+
if(l2 == NULL)return 0;
10+
return l1->val > l2->val;
11+
//这里比较的是优先级,默认优先级排序是“<”号,若 l1Val > l2Val 返回真,即表示l1优先级比l2小,l2先入队
12+
//队列的top()函数指的就是优先级最高的元素,即队头元素
13+
}
14+
};
15+
16+
class Solution{
17+
public:
18+
ListNode* mergeKLists(vector<ListNode*>& lists) {
19+
int len = lists.size();
20+
if(len == 0)return NULL;
21+
22+
priority_queue<ListNode*,vector<ListNode*>,compare> Q;//调用小顶堆的方法构造队列!!!
23+
24+
for(int i = 0;i < len;i++)
25+
{
26+
if(lists[i])Q.push(lists[i]);
27+
}
28+
29+
ListNode *head = new ListNode(0);
30+
ListNode *tail = head;
31+
while(!Q.empty() && Q.top() != NULL)
32+
{
33+
ListNode *tmp = Q.top();
34+
Q.pop();
35+
tail->next = tmp;
36+
tail = tail->next;
37+
Q.push(tmp->next);
38+
}
39+
return head->next;
40+
}
41+
};
42+
43+
-----------------------------------------------------------------------
44+
/**
45+
* Definition for singly-linked list.
46+
* struct ListNode {
47+
* int val;
48+
* ListNode *next;
49+
* ListNode(int x) : val(x), next(NULL) {}
50+
* };
51+
*/
52+
class Solution {
53+
public:
54+
ListNode* merge(ListNode*l1,ListNode*l2){ //将两个链表合并的函数
55+
if(l1==NULL&&l2!=NULL) //如果两个链表有一个为空,那么返回另外一个。如果都为空,返回NULL。
56+
return l2;
57+
else if(l1!=NULL&&l2==NULL)
58+
return l1;
59+
else if(l1==NULL&&l2==NULL)
60+
return NULL;
61+
62+
ListNode*ans,*p;
63+
if(l1->val<=l2->val){ //处理首节点
64+
ans=l1;
65+
l1=l1->next;
66+
}
67+
else{
68+
ans=l2;
69+
l2=l2->next;
70+
}
71+
p=ans;
72+
while(l1!=NULL&&l2!=NULL){ //每次从两个链表中取出一个结点放到结果链表当中
73+
if(l1->val<=l2->val)
74+
{
75+
p->next=l1;
76+
l1=l1->next;
77+
}
78+
else
79+
{
80+
p->next=l2;
81+
l2=l2->next;
82+
}
83+
p = p->next;
84+
}
85+
86+
87+
if(l1!=NULL)p->next=l1;
88+
if(l2!=NULL)p->next=l2;
89+
90+
return ans;
91+
}
92+
93+
ListNode* mergeKLists(vector<ListNode*>& lists) {
94+
int len = lists.size();
95+
if(len == 0)return NULL;
96+
97+
ListNode *ans = lists[0];
98+
for(int i = 1; i < len;i++){
99+
ans = merge(ans,lists[i]);
100+
}
101+
102+
return ans;
103+
}
104+
};

0 commit comments

Comments
 (0)