力扣 题目21-- 合并两个有序链表

题目


题解


1.迭代法

一开始都在头结点 由于1和1相等 我们取任意一个 然后把节点向右移动

我取了上面的1所以上面向右移动 此时 1

1与2比较 1小所以取1 然后下面向右移动 此时1->1

同理2与3比较 2小取2 此时1->1->2

....

当一个链表已经被取完时 直接取另一个链表即可 都取完就退出循环

2.递归法

规则1 当一个链表没有值时直接返回另一个链表

规则2 判断每轮的头结点 让头结点小的链表->next 然后与另一个链表重新放入函数中  然后再返回小的那个头结点

 

 

代码


 

迭代

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 struct ListNode {
 5     int val;
 6     ListNode* next;
 7     ListNode() : val(0), next(nullptr) {}
 8     ListNode(int x) : val(x), next(nullptr) {}
 9     ListNode(int x, ListNode* next) : val(x), next(next) {}
10 };
11 
12 class Solution {
13 public:
14     ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
15         ListNode* headlist = new ListNode();
16         ListNode* head = headlist;
17         if (list1 == NULL) {
18             return list2;
19         }
20         else if (list2 == NULL) {
21             return list1;
22         }
23         else if (list1->val >= list2->val) {
24             headlist->val = list2->val;
25             list2 = list2->next;
26         }
27         else if (list1->val < list2->val) {
28             headlist->val = list1->val;
29             list1 = list1->next;
30         }
31         while (true) {
32             if (list1 == NULL && list2 == NULL) {
33                 break;
34             }
35             else if (list1 == NULL) {
36                 headlist->next = list2;
37                 list2 = list2->next;
38             }
39             else if (list2 == NULL) {
40                 headlist->next = list1;
41                 list1 = list1->next;
42             }
43             else if (list1->val >= list2->val) {
44 
45                 headlist->next = list2;
46                 list2 = list2->next;
47             }
48             else if (list1->val < list2->val) {
49                 headlist->next = list1;
50                 list1 = list1->next;
51             }
52             headlist = headlist->next;
53         }
54         headlist->next = NULL;
55         return head;
56     }
57 };
58 void listnum(ListNode& list, vector<int>& vectorlist) {
59     ListNode* headlist = &list;
60     for (int i = 0; i < vectorlist.size(); i++) {
61         ListNode* p;
62         p = (struct ListNode*)malloc(sizeof(struct ListNode*));
63         p->val = vectorlist[i];
64         headlist->next = p;
65         headlist = headlist->next;
66     }
67     headlist->next = NULL;
68 }
69 int main() {
70     Solution sol;
71     ListNode list1(1);
72     vector<int> vectorlist1 = { 2,4 };
73     listnum(list1, vectorlist1);
74     ListNode list2(1);
75     vector<int> vectorlist2 = { 3,4 };
76     listnum(list2, vectorlist2);
77     ListNode* head = sol.mergeTwoLists(&list1, &list2);
78 
79 }
View Code

递归

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4  struct ListNode {
 5      int val;
 6      ListNode *next;
 7      ListNode() : val(0), next(nullptr) {}
 8      ListNode(int x) : val(x), next(nullptr) {}
 9      ListNode(int x, ListNode *next) : val(x), next(next) {}
10  };
11  
12  class Solution {
13  public:
14      ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
15          if (list1 == NULL) {
16              return list2;
17          }
18          else if (list2 == NULL) {
19              return list1;
20          }
21          else if (list1->val >= list2->val) {
22              list2->next = mergeTwoLists(list1, list2->next);
23              return list2;
24          }
25          else if (list1->val < list2->val) {
26              list1->next = mergeTwoLists(list1->next, list2);
27              return list1;
28          }
29          return list1;
30      }
31  };
32 void listnum(ListNode &list, vector<int> &vectorlist) {
33     ListNode* headlist = &list;
34     for (int i = 0; i < vectorlist.size(); i++) {
35         ListNode* p;
36         p = (struct ListNode*)malloc(sizeof(struct ListNode*));
37         p->val = vectorlist[i];
38         headlist->next = p;
39         headlist = headlist->next;
40     }
41     headlist->next = NULL;
42 }
43 int main() {
44     Solution sol;
45     ListNode list1(1);
46     vector<int> vectorlist1 = { 2,4 };
47     listnum(list1, vectorlist1);
48     ListNode list2(1);
49     vector<int> vectorlist2 = { 3,4 };
50     listnum(list2, vectorlist2);
51     ListNode *head=sol.mergeTwoLists(&list1, &list2);
52     
53 }
View Code

 

 

 

 

posted @ 2022-04-09 14:44  无聊的阿库娅  阅读(23)  评论(0编辑  收藏  举报