首页 > 代码库 > #21 合并排序后的两个链表
#21 合并排序后的两个链表
思路
使用三个游标:cur指向合并后链表的尾部,l1,l2分别用于遍历两个链表,较小的元素增加到合并后链表。
小技巧
使用冗余的头结点可以精简地判断一下情形,其中一个链表,或两个都为空链表。
从而精简代码。
朴素代码
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode * head, *ptr; if (!l1 && !l2) return NULL; if (!l1 && l2) return l2; if (l1 && !l2) return l1; if (l1->val > l2->val) { head = l2; l2 = l2->next; } else { head = l1; l1 = l1->next; } ptr = head; while (l1 && l2) { if (l1->val <= l2->val) { ptr->next = l1; l1 = l1->next; } else { ptr->next= l2; l2 = l2->next; } ptr = ptr->next; } if (l1) { ptr->next = l1; } else { ptr->next = l2; } return head; } };
优化代码
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode dummy(0); ListNode *ptr = &dummy; while (l1 && l2) { if (l1->val <= l2->val) { ptr->next = l1; l1 = l1->next; } else { ptr->next= l2; l2 = l2->next; } ptr = ptr->next; } if (l1) { ptr->next = l1; } else { ptr->next = l2; } return dummy.next; } };
#21 合并排序后的两个链表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。