问题描述:将两个排序链表合并为一个新的排序链表
样例
方法一(非递归方法):
给出 1->3->8->11->15->null
,2->null
, 返回 1->2->3->8->11->15->null
。
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param ListNode l1 is the head of the linked list
* @param ListNode l2 is the head of the linked list
* @return: ListNode head of linked list
*/
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
// write your code here
ListNode *head = NULL;
ListNode *pre = NULL;
if(l1 == NULL && l2 == NULL){
return NULL;
}
else if(l1 == NULL && l2!=NULL){
return l2;
}
else if(l1!=NULL && l2 ==NULL){
return l1;
}
while(l1 != NULL && l2 != NULL){
int val1 = 0,val2 = 0;
val1 = l1->val;
val2 = l2->val;
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
if(val1<val2){
temp = l1;
if(head == NULL){
head = temp;
pre = head;
}
else{
pre->next = temp;
pre = temp;
}
l1 = l1->next;
}
else{
temp = l2;
if(head == NULL){
head = temp;
pre = head;
}
else{
pre->next = temp;
pre = temp;
}
l2 = l2->next;
}
}
if(l1 == NULL){
pre->next = l2;
}
else if(l2 == NULL){
pre->next = l1;
}
return head;
}
};
方法二:(递归方法)
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param ListNode l1 is the head of the linked list
* @param ListNode l2 is the head of the linked list
* @return: ListNode head of linked list
*/
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if(l1 == NULL){
return l2;
}
if(l2 == NULL){
return l1;
}
ListNode *head = NULL;
if(l1->val < l2->val){
head = l1;
head->next = mergeTwoLists(l1->next,l2);
}
else{
head = l2;
head->next = mergeTwoLists(l1,l2->next);
}
return head;
}
};