p17 合并2个有序单链表 (leetcode21)

一:解题思路

这道题可以用2种方法来做。第一种是递归法,第二种是迭代法。

二:完整代码示例 (C++版和Java版)

递归法C++:

class Solution 
{
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) 
    {
        ListNode* ret = NULL;

        if ((l1 == NULL) && (l2 == NULL))
        {
            ret = NULL;
        }
        else if ((l1 == NULL) && (l2 != NULL))
        {
            ret = l2;
        }
        else if ((l1 != NULL) && (l2 == NULL))
        {
            ret = l1;
        }
        else
        {
            if (l1->val < l2->val)
            {
                l1->next = mergeTwoLists(l1->next,l2);
                ret = l1;
            }
            else
            {
                l2->next = mergeTwoLists(l1,l2->next);
                ret = l2;
            }
        }

        return ret;
    }
};

递归法Java:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2)
    {
          ListNode ret=null;

          if((l1==null)&&(l2==null))
          {
              ret=null;
          }
          else if((l1==null)&&(l2!=null))
          {
              ret=l2;
          }
          else if((l1!=null)&&(l2==null))
          {
              ret=l1;
          }
          else
          {
              if(l1.val<l2.val)
              {
                  l1.next=mergeTwoLists(l1.next,l2);
                  ret=l1;
              }
              else
              {
                  l2.next=mergeTwoLists(l1,l2.next);
                  ret=l2;
              }
          }

          return ret;
    }
}

迭代法C++:

class Solution 
 {
 public:
     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) 
     {
         ListNode* dummy = new ListNode(0);
         ListNode* p = dummy;

         while ((l1 != NULL) && (l2 != NULL))
         {
             if (l1->val < l2->val)
             {
                 p->next = l1;
                 l1 = l1->next;
             }
             else
             {
                 p->next = l2;
                 l2 = l2->next;
             }

             p = p->next;
         }

         if (l1 != NULL) p->next = l1;
         if (l2 != NULL) p->next = l2;

         return dummy->next;
     }
 };

迭代法Java:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2)
    {
          ListNode dummy=new ListNode(0);
          ListNode p=dummy;

          while((l1!=null)&&(l2!=null))
          {
              if(l1.val<l2.val)
              {
                  p.next=l1;
                  l1=l1.next;
              }
              else
              {
                  p.next=l2;
                  l2=l2.next;
              }
              
              p=p.next;
          }
          
          if(l1!=null) p.next=l1;
          if(l2!=null) p.next=l2;

          return dummy.next;
    }
}

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12462634.html