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

    问题描述:

    将两个已经排序的单向链表合并为一个链表,要求空间复杂度尽可能的小。

    本题两个注意事项:

    第一,任何题目都有时间和空间的要求,所以不要想当然地重建一个链表,这样会带来空间的浪费

    第二,该题可以用两种方法来实现,递归和循环,在写答案之前,可以和面试官交流

    具体代码如下

    (i)递归方法:

    struct listNode
    {
      int data;
      listNode *next;
    };
    listNode *mergeList(listNode *p1,listNode *p2)
    {
    	if(p1==NULL)
    	{
    		return p2;
    	}
    	if(p2==NULL)
    	{
    	  return p1;
    	}
    	listNode *next;
    	if(p1->data<p2->data)
    	{
    		next=mergeList(p1->next,p2);
    		p1->next=next;
    	 return p1;
    	}else
    	{
    		next=mergeList(p1,p2->next);
    		p2->next=next;
    		return p2;
    	}
    
    }


     (ii)循环解法:

    #include "stdafx.h"
    #include <iostream> 
    #include <string>
    using namespace std;
    struct listNode
    {
    	int data;
    	listNode *next;
    };
    listNode *mergeList(listNode *p1,listNode *p2)
    {
    	if(p1==NULL)
    	{
    		return p2;
    	}
    	if(p2==NULL)
    	{
    		return p1;
    	}
    	listNode *newHead,*cur;
    	if(p1->data<p2->data)
    	{
    		newHead=p1;
    		p1=p1->next;
    	}else
    	{
    		newHead=p2;
    		p2=p2->next;
    	}
    	cur=newHead;
    	while(p1!=NULL && p2!=NULL)
    	{
    		if(p1->data<p2->data)
    		{
    			cur->next=p1;
    			p1=p1->next;
    			cur=cur->next;
    		}else
    		{
    			cur->next=p2;
    			p2=p2->next;
    			cur=cur->next;
    		}
    	}
    
    	cur->next=p2->next==NULL?p1:p2;
    	return newHead;
    }


     


  • 相关阅读:
    关于makefile
    代理服务器简要
    配置ftp服务
    Nginx服务器的Web请求处理机制
    Nginx模块
    linux的开机网络设置
    mysql数据库优化的常见方法
    笔试题【二维矩阵操作,文件存取】
    水仙花数的求解
    9x9乘法表输出[Java]
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3206382.html
Copyright © 2011-2022 走看看