• Merge Two Sorted Lists


    注意空串的处理

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            ListNode *p1=l1;
            ListNode *p2=l2;
            ListNode *pre=NULL;
            ListNode *p=NULL;
            if(p1==NULL) return p2;
            if(p2==NULL) return p1;
            while(p1 && p2)
            {
                if(pre==NULL)
                {
                    if(p1->val < p2->val) 
                    {
                        pre=p=p1;
                        p1=p1->next;
                        p->next=NULL;
                    }
                    else {
                           pre=p=p2;
                           p2=p2->next;
                           p->next=NULL;
                         }
                    
                 }
                 else{
                     if(p1->val < p2->val)
                     {
                         p->next=p1;
                         p1=p1->next;
                         p=p->next;
                         p->next=NULL;
                     }
                     else
                     {
                         p->next=p2;
                         p2=p2->next;
                         p=p->next;
                         p->next=NULL;
                     }
                 }
            }
               if(p1==NULL ) p->next=p2;
               if(p2==NULL) p->next=p1;
                return pre;
                 
        }
    };

    网上的另一种做法:利用递归

     1 class Solution {
     2 public:
     3     ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
     4         if(l1 == NULL) return l2;
     5         if(l2 == NULL) return l1;
     6 
     7         if(l1->val < l2->val) {
     8             l1->next = mergeTwoLists(l1->next, l2);
     9             return l1;
    10         } else {
    11             l2->next = mergeTwoLists(l2->next, l1);
    12             return l2;
    13         }
    14     }
    15 };
  • 相关阅读:
    重载和重写的定义
    方法的重载与重写有什么区别?
    java: while 和do while区别
    java中的运算符
    java 8种基本数据类型
    java.面向对象特征
    java语言的特点
    java.注释类型
    char 和 varchar2 区别
    使用sql对数据库进行简单的增删改查
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5239762.html
Copyright © 2020-2023  润新知