当前位置:   article > 正文

排序算法刷题【leetcode88题目:合并两个有序数组、leetcode21:合并两个有序链表】

排序算法刷题【leetcode88题目:合并两个有序数组、leetcode21:合并两个有序链表】

一、合并两个有序数组

        题目比较简单,使用归并排序里面的同样的操作就可以,代码如下所示

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. /* leetcode88题:合并两个有序数组 */
  5. class Solution {
  6. public:
  7. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
  8. int p1 = m - 1, p2 = n - 1, p3 = m + n - 1;
  9. while (p1 != -1 || p2 != -1)
  10. {
  11. //注意“||”两端的条件最终得到拷贝数组中的元素的动作是相同的才可以
  12. if (p1 == -1 || p2 != -1 && (nums1[p1] <= nums2[p2]))
  13. {
  14. nums1[p3--] = nums2[p2--];
  15. }
  16. else
  17. {
  18. nums1[p3--] = nums1[p1--];
  19. }
  20. }
  21. return;
  22. }
  23. };
  24. int main()
  25. {
  26. return 0;
  27. }

二、合并两个有序链表

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. /* leetcode88题:合并两个有序数组 */
  5. class Solution {
  6. public:
  7. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
  8. int p1 = m - 1, p2 = n - 1, p3 = m + n - 1;
  9. while (p1 != -1 || p2 != -1)
  10. {
  11. //注意“||”两端的条件最终得到拷贝数组中的元素的动作是相同的才可以
  12. if (p1 == -1 || p2 != -1 && (nums1[p1] <= nums2[p2]))
  13. {
  14. nums1[p3--] = nums2[p2--];
  15. }
  16. else
  17. {
  18. nums1[p3--] = nums1[p1--];
  19. }
  20. }
  21. return;
  22. }
  23. };
  24. /* leetcode:21题,合并两个有序链表,采用的算法和合并数组一样 */
  25. /* 直接创建一个头节点,从前向后(从小到大)的顺序插入排序就可以了 */
  26. struct ListNode {
  27. int val;
  28. ListNode *next;
  29. ListNode() : val(0), next(nullptr) {}
  30. ListNode(int x) : val(x), next(nullptr) {}
  31. ListNode(int x, ListNode *next) : val(x), next(next) {}
  32. };
  33. class Solution {
  34. public:
  35. ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
  36. ListNode ret, * p1 = &ret; //如果只创建一个指针,是没有链表元素的指针和元素的内存的,所以不能存储下一个节点地址。
  37. while (list1 || list2)
  38. {
  39. if (list1 == NULL || list2 != NULL && (list2->val <= list1->val))
  40. {
  41. p1->next = list2;
  42. list2 = list2->next;
  43. p1 = p1->next;
  44. }else{
  45. p1->next = list1;
  46. list1 = list1->next;
  47. p1 = p1->next;
  48. }
  49. }
  50. return ret.next;
  51. }
  52. };
  53. int main()
  54. {
  55. return 0;
  56. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1017445
推荐阅读
相关标签
  

闽ICP备14008679号