剑指offer:合并两个排序的链表

  • 问题描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
  • 分析
    最简单的情况,如果其中一个链表为空,那么直接输出另一个链表。
    对于两个链表都不为空的情况,一般方法,假设两个已知的链表分别为pHead1,pHead2,则新建一个结果链表pHead。从两个链表的头部开始,如果pHead1的值大于pHead2的,把pHead2的值存入pHead,然后用pHead2的下一个节点值与pHead1的当前节点值比较,反之,同理。从分析可以看出每次比较过程相同,可以采用递归。
    思路举例:
    链表1:1,4,5,7
    链表2:2,3,6
    第一次比较:1<2,pHead中添加1,pHead1节点右移
    第二次比较:4>2,pHead中添加2,pHead2节点右移
    第三次比较:4>3,pHead中添加3,pHead2节点右移
    第四次比较:4<6,pHead中添加4,pHead1节点右移
    第五次比较:5<6,pHead中添加5,pHead1节点右移
    第六次比较:7>6,pHead中添加6,pHead2节点右移
    第七次比较:pHead2节点为空,返回pHead1节点值,pHead中添加7
  • 代码
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
       if(!pHead1) //如果链表1为空,返回链表2
          return pHead2;
       if(!pHead2)
           return pHead1;//如果链表2为空,返回链表1
       ListNode *pHead;
       if(pHead1->val > pHead2->val){
           pHead=pHead2;
           pHead->next=Merge(pHead1,pHead2->next);
       }else{
           pHead=pHead1;
           pHead->next=Merge(pHead1->next,pHead2);
       }
       return pHead;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值