赞
踩
题目比较简单,使用归并排序里面的同样的操作就可以,代码如下所示
- #include <iostream>
- #include <vector>
- using namespace std;
-
- /* leetcode88题:合并两个有序数组 */
- class Solution {
- public:
- void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
- int p1 = m - 1, p2 = n - 1, p3 = m + n - 1;
- while (p1 != -1 || p2 != -1)
- {
- //注意“||”两端的条件最终得到拷贝数组中的元素的动作是相同的才可以
- if (p1 == -1 || p2 != -1 && (nums1[p1] <= nums2[p2]))
- {
- nums1[p3--] = nums2[p2--];
- }
- else
- {
- nums1[p3--] = nums1[p1--];
- }
- }
- return;
- }
- };
-
- int main()
- {
-
- return 0;
- }
- #include <iostream>
- #include <vector>
- using namespace std;
-
- /* leetcode88题:合并两个有序数组 */
- class Solution {
- public:
- void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
- int p1 = m - 1, p2 = n - 1, p3 = m + n - 1;
- while (p1 != -1 || p2 != -1)
- {
- //注意“||”两端的条件最终得到拷贝数组中的元素的动作是相同的才可以
- if (p1 == -1 || p2 != -1 && (nums1[p1] <= nums2[p2]))
- {
- nums1[p3--] = nums2[p2--];
- }
- else
- {
- nums1[p3--] = nums1[p1--];
- }
- }
- return;
- }
- };
-
-
- /* leetcode:21题,合并两个有序链表,采用的算法和合并数组一样 */
- /* 直接创建一个头节点,从前向后(从小到大)的顺序插入排序就可以了 */
- struct ListNode {
- int val;
- ListNode *next;
- ListNode() : val(0), next(nullptr) {}
- ListNode(int x) : val(x), next(nullptr) {}
- ListNode(int x, ListNode *next) : val(x), next(next) {}
- };
-
- class Solution {
- public:
- ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
- ListNode ret, * p1 = &ret; //如果只创建一个指针,是没有链表元素的指针和元素的内存的,所以不能存储下一个节点地址。
- while (list1 || list2)
- {
- if (list1 == NULL || list2 != NULL && (list2->val <= list1->val))
- {
- p1->next = list2;
- list2 = list2->next;
- p1 = p1->next;
- }else{
- p1->next = list1;
- list1 = list1->next;
- p1 = p1->next;
- }
- }
- return ret.next;
- }
- };
-
-
- int main()
- {
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。