1. Non recursive solution.
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* phead=new ListNode(0); ListNode* node1=l1; ListNode* node2=l2; ListNode* node=phead; while(node1!=NULL || node2!=NULL) { if((node2==NULL&&node1!=NULL)||(node1&&node2&&(node1->val <= node2->val))) { node->next=node1; node1=node1->next; node=node->next; continue; } if((node1==NULL&&node2!=NULL)||(node1&&node2&&(node1->val > node2->val))) { node->next=node2; node2=node2->next; node=node->next; } } node=phead->next; delete phead; return node; }
2. Recursive solution
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1==NULL) return l2; if(l2==NULL) return l1; ListNode* node=NULL; if(l1->val <= l2->val) { node = l1; node->next = mergeTwoLists(l1->next, l2); } else { node = l2; node->next = mergeTwoLists(l1, l2->next); } return node; }