这个递归还是比较清晰的。这个题递归结束的标志非常清晰,返回没有抵达NULL的那一条链表的剩余链表即可;不断传入可以推进那一条链表的next节点实现递归的推进。
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) { // write code here if(pHead1 == NULL || pHead2 == NULL) { return pHead1?pHead1:pHead2; } struct ListNode* cur; if(pHead1->val <= pHead2->val) { cur = Merge(pHead1->next,pHead2); pHead1->next = cur; return pHead1; } else { cur = Merge(pHead1,pHead2->next); pHead2->next = cur; return pHead2; } return pHead1; }