zoukankan      html  css  js  c++  java
  • 合并两个有序链表

    题目

    将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    示例:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    来源:力扣(LeetCode)

    解答

    我的第一个版本,有点糟糕:

    /**
     * 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* cur=new ListNode(0);
             ListNode* pre=cur;
             while(l1!=NULL||l2!=NULL)
             {
                  if(l1!=NULL&&l2!=NULL)
                  {
                      while(l2!=NULL&&l1->val>l2->val)
                      {
                        cur->next=l2;
                        cur=cur->next;
                        l2=l2->next;
                      }
                      if(l2==NULL)
                      {
                          continue;
                      }
                      while(l1!=NULL&&l1->val<=l2->val)
                      {
                        cur->next=l1;
                        cur=cur->next;
                        l1=l1->next;
                      }
                  }else if(l1==NULL&&l2!=NULL)
                  {
                      cur->next=l2;
                      break;
                  }else if(l1!=NULL&&l2==NULL)
                  {
                      cur->next=l1;
                      break;
                  }
             }
             return pre->next;
        }
    };
    

    我的第二个版本:

    /**
     * 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) {
             if (l2 == NULL) return l1;
             if (l1 == NULL) return l2;
             ListNode* cur=new ListNode(0);
             ListNode* pre=cur;
             while(l1!=NULL&&l2!=NULL)
             {
    
                      while(l2!=NULL&&l1->val>l2->val)
                      {
                        cur->next=l2;
                        cur=cur->next;
                        l2=l2->next;
                      }
                      if(l2==NULL)
                      {
                          cur->next=l1;
                          break;
                      }
                      while(l1!=NULL&&l1->val<=l2->val)
                      {
                        cur->next=l1;
                        cur=cur->next;
                        l1=l1->next;
                      }
                      if(l1==NULL)
                      {
                          cur->next=l2;
                          break;
                      }
             }
             return pre->next;
        }
    };
    

    大佬的版本:

    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            ListNode newHead(0);
            ListNode *pi = &newHead;
            while(l1 && l2) {
                if(l1->val > l2->val) swap(l1, l2);
                pi->next = l1;
                l1 = l1->next;
                pi = pi->next;
            }
            pi->next = l1 ? l1 : l2;
            return newHead.next;
        }
    };
    
  • 相关阅读:
    装机软件
    关于软件开发
    Jquery中ajax基本语法
    jQuery+Ajax+PHP滚动加载
    ajax无刷新分页
    PHPExcel数据导出到Excel文件
    Linux下启动,停止,重启Nginx、Mysql、PHP
    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
    linux系统给普通用户添加sudo权限
    Linux下全局安装composer方法
  • 原文地址:https://www.cnblogs.com/aoximin/p/12342089.html
Copyright © 2011-2022 走看看