腾讯//合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode temp1 = l1;
ListNode temp2 = l2;
ListNode ret = new ListNode(0);
ListNode ret1 = ret;
while(temp1!=null&&temp2!=null){
if(temp1.val>temp2.val){
ret.next = temp2;
ret = ret.next;
temp2 = temp2.next;
}else{
ret.next = temp1;
ret = ret.next;
temp1 = temp1.next;
}
}
if(temp1==null&&temp2!=null)
ret.next = temp2;
if(temp2==null&&temp1!=null)
ret.next = temp1;
return ret1.next;
}
}
递归
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode temp1 = l1;
ListNode temp2 = l2;
ListNode ret = getResult(temp1, temp2);
return ret;
}
public ListNode getResult(ListNode t1, ListNode t2){
ListNode t0 = new ListNode(0);
ListNode head = t0;
if(t1 == null) return t2;
if(t2 == null) return t1;
if(t1.val>t2.val){
t0.next = t2;
t0 = t0.next;
t0.next = getResult(t1, t2.next);
}else{
t0.next = t1;
t0 = t0.next;
t0.next = getResult(t1.next,t2);
}
return head.next;
}
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1 == NULL)
return l2;
else if(l2 == NULL)
return l1;
ListNode* pMergeHead = NULL;
if(l1->val < l2->val){
pMergeHead = l1;
pMergeHead->next = mergeTwoLists(l1->next, l2);
}else{
pMergeHead = l2;
pMergeHead->next = mergeTwoLists(l1, l2->next);
}
return pMergeHead;
}
};