3.剑指offer-合并两个有序的链表
2017-04-28 11:40
531 查看
1.题目要求
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。要求辅助空间是O(1)2. 想法
假设两个链表的头指针分别是pHead1和pHead2.基本想法是:用一个指针p指向合成链表的尾节点,p1指向pHead1链表中等待比较的节点,p2指向pHead2链表中等待比较的节点,那么每一次比较p1指向的节点和p2指向的节点的大小,继而决定谁先进入新合成的链表。
3.代码(只是部分代码)
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL) return pHead2; if(pHead2==NULL) return pHead1; ListNode *p,*Head,*p1,*p2,*p3; if(pHead1->val<=pHead2->val){ Head=pHead1; p1=pHead1->next; p2=pHead2; p=Head; }else{ Head=pHead2; p1=pHead1; p2=pHead2->next; p=Head; } while(p1!=NULL && p2!=NULL){ if(p1->val<=p2->val){ p3=p1->next; p->next=p1; p1=p3; p=p->next; }else{ p3=p2->next; p->next=p2; p2=p3; p=p->next; } } if(p1==NULL){ p->next=p2; }else{ p->next=p1; } return Head; } };
相关文章推荐
- 剑指OFFER——合并两个有序的链表
- 【剑指offer】链表相关-合并两个有序链表&递归写法17
- 【剑指offer】第二十四题(反转链表) 和 第二十五题(合并两个有序链表)
- 剑指Offer_面试题17_合并两个有序链表
- 【剑指offer】合并两个有序的链表
- 剑指Offer之合并两个有序的链表
- 【剑指offer】合并两个有序的链表
- 剑指offer--递归非递归合并两个有序链表
- 剑指offer面试题-合并两个有序链表
- 【面试题】剑指Offer-17-合并两个有序的单链表
- 剑指offer 合并两个有序链表
- 剑指offer----合并两个有序链表
- 剑指Offer---面试题17:合并两个有序链表
- (C++)剑指offer-16:合并两个排序的链表(代码的鲁棒性)
- 剑指Offer------合并两个排序的链表
- 剑指offer面试题17-:合并两个排序链表
- 剑指offer面试题[17]-合并两个排序的链表
- 剑指offer---合并两个排序的链表
- 剑指offer--面试题17:合并两个排序的链表
- 剑指offer面试题17 合并两个排序的链表