#21 合并排序后的两个链表
2017-06-18 22:08
281 查看
思路
使用三个游标:cur指向合并后链表的尾部,l1,l2分别用于遍历两个链表,较小的元素增加到合并后链表。
小技巧
使用冗余的头结点可以精简地判断一下情形,其中一个链表,或两个都为空链表。
从而精简代码。
朴素代码
优化代码
使用三个游标: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; } };
相关文章推荐
- 16、合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表(递归算法)
- 剑指offer--面试题25:合并两个排序的链表
- 合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表(c++ 递归+非递归)
- 合并两个排序的链表
- 【剑指offer-Java版】17合并两个排序链表
- 合并两个排序的链表
- 剑指Offer----合并两个排序的链表
- 合并两个排序链表
- 剑指offer-算法题练习:part18 合并两个排序的链表
- OK 面试题25:合并两个排序的链表
- 《剑指offer》编程题java实现(十七):合并两个排序的链表
- 合并两个排序链表
- 【牛客网】合并两个排序的链表
- 合并两个排序链表-LintCode
- 剑指offer:合并两个排序的链表
- 《剑指offer》-合并两个排序的链表
- 165 - 合并两个排序链表