leetcode_023 Merge k Sorted Lists
2016-03-31 21:35
459 查看
题目分析:
合并k个已经排好序的链表为一个有序链表。
解题思路:
递归实现
利用递归思想,依次两两合并一个有序链表,直到合并为一个链表为止。
实现程序
合并k个已经排好序的链表为一个有序链表。
解题思路:
递归实现
利用递归思想,依次两两合并一个有序链表,直到合并为一个链表为止。
实现程序
//合并两个有序单链表 ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { ListNode *head = (ListNode *)malloc(sizeof(ListNode)); head->val = -1; head->next = NULL; ListNode *temp = head; ListNode *p = l1, *q = l2; while(p != NULL && q != NULL) // 遍历两个链表进行合并 { if (p->val <= q->val) { temp->next = p; temp = temp->next; p = p->next; } else if (p->val > q->val) { temp->next = q; temp = temp->next; q = q->next; } } if (p != NULL) { temp->next = p; } else if (q != NULL) { temp->next = q; } return head->next; } //合并k个有序的单链表 ListNode *mergeKLists(vector<ListNode *> &lists) { if (lists.size() == 0) // 处理特殊情况 return NULL; if (lists.size() == 1) return lists[0]; vector<ListNode *> newLists; int start = 0; if (lists.size() % 2 != 0) // 处理链表为奇数情况 { newLists.push_back(lists[0]); start++; } for (int i = start; i < lists.size(); i += 2) // 两两合并链表 { ListNode *temp = mergeTwoLists(lists[i], lists[i + 1]); newLists.push_back(temp); } return mergeKLists(newLists); // 递归进行合并 }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解