21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
题目链接:https://leetcode.com/problems/merge-two-sorted-lists/description/
题目大意:合并两个有序链表为一个有序链表
解题思路:之前不太会用链表,这题是用来熟悉链表结构体的操作的。
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#include <stack>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(0);
ListNode* ans = head;
while(l1 != NULL || l2 != NULL){
if(l1 == NULL){
head -> next = new ListNode(l2 -> val);
head = head ->next;
l2 = l2 -> next;
continue;
}else if(l2 == NULL){
head -> next = new ListNode(l1 -> val);
head = head ->next;
l1 = l1 -> next;
continue;
}
int a = l1 -> val;
int b = l2 -> val;
if(a > b){
head -> next = new ListNode(b);
head = head ->next;
l2 = l2 -> next;
}else{
head -> next = new ListNode(a);
head = head ->next;
l1 = l1 -> next;
}
}
ans = ans -> next;
return ans;
}
};
int main(void){
int n,m,x;
// vector <string> vt;
scanf("%d%d",&n,&m);
Solution so;
ListNode* head1 = new ListNode(0);
ListNode* l1 = head1;
for(int i = 0;i < n ; i ++){
scanf("%d",&x);
head1 -> next = new ListNode(x);
head1 = head1 -> next ;
}
ListNode* head2 = new ListNode(0);
ListNode* l2 = head2;
for(int i = 0;i < m ; i ++){
scanf("%d",&x);
head2 -> next = new ListNode(x);
head2 = head2 -> next;
}
l1 = l1 -> next;
l2 = l2 -> next;
ListNode* ans = so.mergeTwoLists(l1,l2);
while(ans != NULL){
cout << ans -> val <<endl;
ans = ans -> next;
}
}