2020-2-12
- You gotta do what you’re meant to do.
想做什么就去做。
题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人解答:(C版本)
- 主体思路:通过比较两个链表值的大小,切换指针的指向,不断迭代完成。
- 具体思路看代码注释。不过最好还是自己画图理解或者查看官方题解的动图
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode* q = NULL;
struct ListNode* p = NULL;
struct ListNode* t = NULL;
if(NULL == l1)
{
return l2;
}
if(NULL == l2)
{
return l1;
}
if(l1->val > l2->val)
{
t = l1;
l1 = l2;
l2 = t;
}
q = l1;
p = l2;
while(NULL != q->next)
{
if((p->val >= q->val) && (p->val < q->next->val))
{
t = q->next;
q->next = p;
q = t;
t = p->next;
p->next = q;
q = p;
p = t;
}
else
{
q = q->next;
}
if(NULL == p)
{
return l1;
}
}
q->next = p;
return l1;
}
- 结果:
他山之石:
- 参考了[官方题解]https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode/),官方依旧提供了迭代和递归的方式,其中递归的方法真的很精妙,不过理解起来也很复杂。