题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
分析:两个链表已有序,看题目的例子两链表是升序,在这种情况下,直接令新链表的头指针指向两个链表其中第一个元素小的即可。
之后依次更新新链表的下一个元素。
需要注意两处:
1.其中一个链表为空的时候
2.当把第一个小的元素确定后,记得让原链表的指针后移
代码:
/**
* 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) {
ListNode *L , *l ;
if(l1 == NULL) return l2 ;
if(l2 == NULL) return l1 ;
if(l1->val < l2->val){
L = l1 ;
l1 = l1->next ;
}
else{
L = l2 ;
l2 = l2->next ;
}
l = L ;
while(l1 != NULL && l2 != NULL){
if(l1->val < l2->val){
l->next = l1 ;
l = l->next ;
l1 = l1->next ;
}
else{
l->next = l2 ;
l = l->next ;
l2 = l2->next ;
}
}
if(l1)
l->next = l1 ;
if(l2)
l->next = l2 ;
return L ;
}
};