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

    题目

    代码

    /**
     * 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* root = nullptr, *ptr = nullptr;
            //小的先加入链表
    		while (l1 != nullptr&&l2 != nullptr)
    		{
    			if (l1->val > l2->val)
    			{
    				if (root == nullptr)
    				{
    					root = l2;
    					ptr = root;
    				}
    				else {
    					root->next = l2;
    					root = root->next;
    
    				}
    				l2 = l2->next;
    
    
    			}
    			else
    			{
    				if (root == nullptr)
    				{
    					root = l1;
    					ptr = root;
    				}
    				else {
    					root->next = l1;
    					root = root->next;
    
    				}
    				l1 = l1->next;
    			}
    
    		}
            //如果l1还有元素存在
    		while (l1 != nullptr)
    		{
    			if (root == nullptr)
    			{
    				root = l1;
    				ptr = root;
    			}
    			else
    			{
    				root->next = l1;
    				root = root->next;
    			}
    
    			l1 = l1->next;
    		}
            //如果l2还有元素存在
    		while (l2 != nullptr)
    		{
    			if (root == nullptr)
    			{
    				root = l2;
    				ptr = root;
    			}
    			else
    			{
    				root->next = l2;
    				root = root->next;
    			}
    
    			l2 = l2->next;
    		}
    		return ptr;
    
    	}
    };
    
    

    思路

    先同时遍历两个链表,小的先加入新链表中,最后判断l1或者l2是否还有剩余元素,有的话全部再加入新链表。方法时间复杂度O(m+n),空间复杂度O(1)

    https://github.com/li-zheng-hao
  • 相关阅读:
    github和bitbucket
    shell 删除文件下的* (copy).jpg备份文件
    linux 的iptables防火墙
    yum使用本地源
    linux的vnc- rdesktop远程登录windows桌面
    httpd/php/mysql的安装-1
    linux下的视频音频播放器终极解决方案
    linux读写ntfs
    示波器和三极管
    电子技术中的dB
  • 原文地址:https://www.cnblogs.com/lizhenghao126/p/11053632.html
Copyright © 2011-2022 走看看