注意空串的处理
/** * 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 *p1=l1; ListNode *p2=l2; ListNode *pre=NULL; ListNode *p=NULL; if(p1==NULL) return p2; if(p2==NULL) return p1; while(p1 && p2) { if(pre==NULL) { if(p1->val < p2->val) { pre=p=p1; p1=p1->next; p->next=NULL; } else { pre=p=p2; p2=p2->next; p->next=NULL; } } else{ if(p1->val < p2->val) { p->next=p1; p1=p1->next; p=p->next; p->next=NULL; } else { p->next=p2; p2=p2->next; p=p->next; p->next=NULL; } } } if(p1==NULL ) p->next=p2; if(p2==NULL) p->next=p1; return pre; } };
网上的另一种做法:利用递归
1 class Solution { 2 public: 3 ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { 4 if(l1 == NULL) return l2; 5 if(l2 == NULL) return l1; 6 7 if(l1->val < l2->val) { 8 l1->next = mergeTwoLists(l1->next, l2); 9 return l1; 10 } else { 11 l2->next = mergeTwoLists(l2->next, l1); 12 return l2; 13 } 14 } 15 };