剑指offer-合并两个排序的链表
2017-05-05 20:18
190 查看
问题
题目:[合并两个排序的链表]思路
传统merge的思路不说了,因为此时空间的复杂度是O(N).主要说就地合并的思路。当然,这个题其实牛客的测试用例有问题,考虑不全面。
基本思想就是当p的当前值比q的当前值小的时候,q的上一个元素要指向p。当然,这有个前提是q的上一个元素不能指向pre_p,否则没有没有指向的意义。比如 1->3->5, 2->100->101。牛客没有考虑这种测试用例
代码
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* p = pHead1; ListNode* q = pHead2; if(!p && !q) return NULL; if(p && !q) return p; if(!p && q) return q; ListNode* p_pre = NULL; ListNode* q_pre = NULL; while(p&&q){ if( p->val < q->val ){ if(q_pre && q_pre->next != p_pre ){ q_pre->next = p; } p_pre = p; p = p->next; } else{ if(p_pre && p_pre->next != q_pre ){ p_pre->next = q; } q_pre = q; q = q->next; } } if(p) q_pre->next = p; if(q) p_pre->next = q; if(pHead1->next == pHead2) return pHead1; else return pHead2; } };
相关文章推荐
- 《剑指offer》-合并两个排序的链表
- 剑指offer(十六)合并两个排序的链表
- 剑指offer—合并两个排序的链表
- 剑指offer之面试题17:合并两个排序的链表
- 《剑指Offer》面试题17:合并两个排序的链表
- 剑指Offer(25)合并两个排序后的链表
- 《剑指offer》合并两个排序的链表
- 剑指offer题解C++【16】合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 《剑指Offer》 合并两个排序的链表
- 剑指offer——面试题17:合并两个排序的链表(非递归方法和递归方法)
- 《剑指offer》面试题17—合并两个排序链表
- 《剑指offer》——合并两个排序的链表
- 《剑指offer》——合并两个排序的链表
- 剑指offer-面试题17:合并两个排序的链表
- 剑指Offer——(16)合并两个排序的链表
- 剑指Offer(Java版):合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 剑指offer系列之十五:合并两个排序的链表
- 剑指offer(十五)之合并两个排序的链表