一:解题思路
这道题可以用2种方法来做。第一种是递归法,第二种是迭代法。
二:完整代码示例 (C++版和Java版)
递归法C++:
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* ret = NULL; if ((l1 == NULL) && (l2 == NULL)) { ret = NULL; } else if ((l1 == NULL) && (l2 != NULL)) { ret = l2; } else if ((l1 != NULL) && (l2 == NULL)) { ret = l1; } else { if (l1->val < l2->val) { l1->next = mergeTwoLists(l1->next,l2); ret = l1; } else { l2->next = mergeTwoLists(l1,l2->next); ret = l2; } } return ret; } };
递归法Java:
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode ret=null; if((l1==null)&&(l2==null)) { ret=null; } else if((l1==null)&&(l2!=null)) { ret=l2; } else if((l1!=null)&&(l2==null)) { ret=l1; } else { if(l1.val<l2.val) { l1.next=mergeTwoLists(l1.next,l2); ret=l1; } else { l2.next=mergeTwoLists(l1,l2.next); ret=l2; } } return ret; } }
迭代法C++:
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* dummy = new ListNode(0); ListNode* p = dummy; while ((l1 != NULL) && (l2 != NULL)) { if (l1->val < l2->val) { p->next = l1; l1 = l1->next; } else { p->next = l2; l2 = l2->next; } p = p->next; } if (l1 != NULL) p->next = l1; if (l2 != NULL) p->next = l2; return dummy->next; } };
迭代法Java:
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy=new ListNode(0); ListNode p=dummy; while((l1!=null)&&(l2!=null)) { if(l1.val<l2.val) { p.next=l1; l1=l1.next; } else { p.next=l2; l2=l2.next; } p=p.next; } if(l1!=null) p.next=l1; if(l2!=null) p.next=l2; return dummy.next; } }