[剑指offer] 16. 合并两个排序的链表

Posted Ruoh3kou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer] 16. 合并两个排序的链表相关的知识,希望对你有一定的参考价值。

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解法一:
非递归解
class Solution
{
public:
  ListNode *Merge(ListNode *pHead1, ListNode *pHead2)
  {
    if (pHead1 == NULL)
      return pHead2;
    if (pHead2 == NULL)
      return pHead1;
    ListNode *a = pHead1;
    ListNode *b = pHead2;
    ListNode *res = NULL;
    ListNode *cur = NULL;
    while (a != NULL && b != NULL)
    {
      if (a->val < b->val)
      {
        if (res == NULL)
        {
          res = cur = a;
        }
        else
        {
          cur->next = a;
          cur = cur->next;
        }
        a = a->next;
      }
      else
      {
        if (res == NULL)
        {
          res = cur = b;
        }
        else
        {
          cur->next = b;
          cur = cur->next;
        }
        b = b->next;
      }
    }
    if (a == NULL)
      cur->next = b;
    else
      cur->next = a;
    return res;
  }
};

解法二:

递归解

class Solution
{
public:
  ListNode *Merge(ListNode *pHead1, ListNode *pHead2)
  {
    if (pHead1 == NULL)
      return pHead2;
    if (pHead2 == NULL)
      return pHead1;
    if (pHead1->val < pHead2->val)
    {
      pHead1->next = Merge(pHead1->next, pHead2);
      return pHead1;
    }
    else
    {
      pHead2->next = Merge(pHead1, pHead2->next);
      return pHead2;
    }
  }
};

 

以上是关于[剑指offer] 16. 合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

[剑指offer] 16. 合并两个排序的链表

剑指Offer16合并两个排序的链表

剑指Offer 16. 合并两个排序的链表 (链表)

剑指Offer-16.合并两个排序的链表(C++/Java)

剑指offer16-合并两个排序链表

剑指offer16-合并两个排序链表