创新工场软工题2-1

原创 2016年08月29日 09:57:10

题目:
1将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变。

示例:
交换前链表的顺序 交换后链表的顺序
4→5→3→1→2 ==> 5→3→1→4→2
1 ==> 1 (链表仅含一个元素)
2→1 ==>1→2
==> (链表为空)
C/C++:
链表节点定义为:
struct node {
struct node *next;
int value;
};
struct node *swap(struct node *list);

Java:
链表节点定义为:
class Node {
public Node next;
public int value
}
Node swap(Node list)

注意点和要求如下:
1. swap函数要求对节点的指针/引用进行操作(不得创建任何新的链表节点)
2. 不得使用任何库函数/API,如需使用类似功能, 请自行实现
3. 不得将链表转化为其他类型数据结构再进行交换,如数组等


第一题完整代码:C++
//方法一:交换元素,复杂度较高,需要复制元素

// Source: 
// Author: YangQiang
// Date  : 2016-8-22

#include<iostream>
using namespace std;

struct node {
struct node *next;
int value;
};
struct node *swap(struct node *list);

struct node *swap(struct node *list)
{
    //处理不合理输入
    if(!list) return NULL;

    //定义两个指针,一个寻奇数,一个寻偶数
    struct node *p1=list;
    struct node *p2=list;
    while( p1 )
    {
        //先寻找偶数
        while( (p1->value)%2!=0 && p1->next)
            p1=p1->next;
        //再寻找偶数后面的奇数
        if(!p1->next) return list;
        p2=p1->next;
        while( (p2->value)%2==0 && p2->next )
            p2=p2->next;
        if(!p2->next) return list;
        //交换元素
        int temp=p1->value;
        p1->value=p2->value;
        p2->value=temp;

        p1=p1->next;    
    }
    return list;
}

struct node *CreatList(int *arr,int n)
{
    if(!arr || n<1) return NULL;
    struct node *head=new struct node;
    head->value=arr[0];
    struct node *p;
    p=head;
    for(int i=1; i<n; i++)
    {
        p->next=new struct node;
        p=p->next;
        p->value=arr[i];
    }
    p->next=NULL;
    return head;
}
int main()
{
    int test1[]={4,5,3,1,2};
    struct node *list1=NULL;
    list1=CreatList(test1,5);

    struct node *result=NULL;
    result=swap(list1);
}

方法二

//方法二:链表更换,时间复杂度降低
struct node *swap(struct node *list)
{
    //处理不合理输入
    if(!list) return NULL;

    //引入一个空的头结点
    struct node *Head=new struct node;
    Head->next=list;
    //定义两个指针,一个寻奇数,一个寻偶数
    struct node *p11=Head;
    struct node *p12=Head;
    struct node *p2=NULL;
    struct node *temp=NULL;

    //先寻找偶数开始的前一个位置p11
    while( p11->next && (p11->next->value)%2!=0 )
        p11=p11->next;
    if( !p11->next ) return list;
    p12=p11->next;

    while( p11 && p12 )
    {   
        //再寻找偶数结束位置p12
        while( p12->next && (p12->next->value)%2==0 )
            p12=p12->next;
        if(!p12->next) return Head->next;

        p2=p12->next; 
        //寻找其后连续奇数的终点p2
        while( p2->next && (p2->next->value)%2!=0 )
            p2=p2->next;

        //更新链表
        temp=p12->next;
        p12->next=p2->next;
        p2->next=p11->next;
        p11->next=temp;

        p11=p2;
        p12=p12->next;
    }
    return Head->next;
}

说明:方法二未贴出完整代码,验证时,只需把方法二算法部分和方法一算法部分替换即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。

软工课程总结

关于这学期的软工大作业,从整体过程来看可以说是一波三折,最后的结果也仅仅差强人意。     最初之所以选择抢票这个题目,一是因为大多数组都选择手环,而手环这个题目对好的idea要求更高一点。二是也想...
  • Wu_Yuexin
  • Wu_Yuexin
  • 2016年01月02日 20:30
  • 177

软工之可行性分析和需求分析

1.引言    软工即用科学,工程的思想来开发软件,大体分为设计前,设计中,和设计后三个阶段。而在设计前就是要分析定位好这个软件能做吗?做什么?的问题。好比说我要说我要盖一座楼,首先我要分析一下资金...
  • boniesunshine
  • boniesunshine
  • 2015年09月19日 10:55
  • 804

【软工视频】软工概论

前言              由于我刚刚开始学习软工视频,感觉有点乱,所以立马决定写篇博客总结一下,为软工学习开个好头。 导图概览           下面是我对软工概论画的一个思维导图: ...
  • LJL55555
  • LJL55555
  • 2016年08月02日 20:10
  • 749

软考之下午题

今年的软考刚刚进行完,趁着刚考完还有热乎劲,想把这些有关于软考的只是来总结一下。今天咱们来讨论下午题的做法。     软考分为上午题和下午题,上午题也就是75个选择题,属于基础只是这一块内容,而...
  • gaibian0823
  • gaibian0823
  • 2015年05月28日 20:47
  • 1306

软工分析建模

软工分析建模 一、分析建模概念             为了更好地理解需求获取过程中用户描述的问题,可以采用创建模型的方式来实现,这就是分析建模的过程。             所谓模型,就是为了理解...
  • nangeali
  • nangeali
  • 2015年09月13日 20:52
  • 719

2016中科院软件所软工中心复试题

一个小时,两道题,都比较简单 1、链表,删除倒数第n个节点 #include #include #include #include using namespace std; typedef struc...
  • u011392877
  • u011392877
  • 2016年03月24日 18:07
  • 572

软工中常见的图介绍和比较

软件工程不同的设计阶段设计不同的图,下面来比较和分析一下。 l 可行性分析阶段 Ø  在可行性分析阶段,需要的主要是系统流程图,又称事务流程图 Ø  系统流程图是是描绘系统物理模型的传统工具。 Ø...
  • u010955843
  • u010955843
  • 2014年01月28日 14:19
  • 918

软件工程实验报告 二

课程 班级 学  号 姓  名 实验时间 软件工程导论 12信管2 120806226 邵成栋 201...
  • u012866341
  • u012866341
  • 2013年12月09日 20:18
  • 696

【软工】——文档图形汇总

前提     大家知道软工中有很多的图形,帮助我们更好的学习和制作软件,但是这些对于我这种新学习的菜鸟,这些图形着实让我眼花缭乱,但是也不能这样挂起来不管啊,所以用了一晚上的时间总结一下这些图,以便之...
  • jiadajing267
  • jiadajing267
  • 2015年08月09日 21:34
  • 1444

【软工】软工思想

在系统开发过程,文档一直伴随着我们,就像是大楼设计的图纸,没有图纸,大楼根本就不能耸立起来。所以,本文,我会以实例来介绍系统开发文档。  软工文档是与程序开发、维护和使用有关的图文材料,记录了软件...
  • happyniceyq
  • happyniceyq
  • 2016年01月24日 21:24
  • 672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创新工场软工题2-1
举报原因:
原因补充:

(最多只允许输入30个字)