Simply care about the boundary cases:
class Solution { public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if (l1 && !l2) return l1; if (!l1 && l2) return l2; if (!l1 && !l2) return NULL; ListNode *p0 = l1->val <= l2->val ? l1 : l2; ListNode *p1 = p0 == l1 ? l2 : l1; ListNode *pa = p0, *pb = p0->next; ListNode *pc = p1, *pd = p1->next; while (pa && pc) { if (!pb) { pa->next = pc; break; } while (pa->val <= pc->val && pc->val <= pb->val) { // Link pa->next = pc; pc->next = pb; // Move on pc = pd; if (pd) pd = pd->next; pa = pa->next; if (!pc || !pb) break; } pa = pa->next; if(pb) pb = pb->next; } return p0; } };
LeetCode "Merge Two Sorted Lists",布布扣,bubuko.com
LeetCode "Merge Two Sorted Lists"
原文:http://www.cnblogs.com/tonix/p/3857659.html