Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1467860

Browse files
Improvement
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent eef0996 commit 1467860

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

‎0021_merge_two_sorted_lists/merge_lists.c‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ static struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
1010
{
1111
struct ListNode dummy;
1212
struct ListNode *tail = &dummy;
13-
dummy.next = l1;
1413

1514
while (l1 != NULL && l2 != NULL) {
1615
if (l1->val <= l2->val) {

‎0023_merge_k_sorted_lists/merge_lists.c‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,45 @@ static void put(struct ListNode **nodes, int size, struct ListNode *n)
6767
build_min_heap(nodes, size);
6868
}
6969

70+
static struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
71+
{
72+
struct ListNode dummy;
73+
struct ListNode *tail = &dummy;
74+
75+
while (l1 != NULL && l2 != NULL) {
76+
if (l1->val <= l2->val) {
77+
tail->next = l1;
78+
l1 = l1->next;
79+
} else {
80+
tail->next = l2;
81+
l2 = l2->next;
82+
}
83+
tail = tail->next;
84+
}
85+
86+
tail->next = l1 != NULL ? l1 : l2;
87+
88+
return dummy.next;
89+
}
90+
91+
static struct ListNode* dfs(struct ListNode** lists, int lo, int hi)
92+
{
93+
if (lo > hi) // listsSize might be zero
94+
return NULL;
95+
96+
if (lo == hi)
97+
return lists[lo];
98+
99+
int mid = lo + (hi - lo) / 2;
100+
return mergeTwoLists(dfs(lists, lo, mid), dfs(lists, mid + 1, hi));
101+
}
102+
103+
70104
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize)
71105
{
106+
#if 1
107+
return dfs(lists, 0, listsSize - 1);
108+
#else
72109
int i, size = 0;
73110
struct ListNode dummy;
74111
struct ListNode *p = &dummy;
@@ -95,6 +132,7 @@ struct ListNode* mergeKLists(struct ListNode** lists, int listsSize)
95132
}
96133

97134
return dummy.next;
135+
#endif
98136
}
99137

100138
int main(void)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /