• 2013——M笔试南京——程序


    迄今只参加了M南京笔试,可惜自己不是计算机出身,还有好多东西得学啊……

    M的最后一题是编程:

    输入:单链表L0、L1、L2……Ln-1、Ln,将链表变为:L0、Ln、L1、Ln-1、L2……

    算法:

    1、将链表分成前后两个部分:
          前一个链表长度 >=  后一链表长度;
          简单
    
    2、反转后一个链表;
       简单
    
    3、合并两个链表;
       简单
    
    4、调用以上接口;
       gameover

    算法实现:

    typedef struct Node Node_t;
    Node_t
    *list_half(Node_t *head) { Node_t *rv = NULL; Node_t *start = head, *end = head; while(end && end->next && end->next->next) { end = end->next->next; start = start->next; } if(start != NULL) { rv = start->next; start->next = NULL; } return rv; } Node_t *list_reverse(Node_t *head) { Node_t *rv = head; Node_t *prev = NULL, *current= head, *next = NULL;

    while(current) { next = current->next;
    current
    ->next = prev; prev = current; current = next; } rv = prev;
    return rv; } /* head_first.len >= head_second.len * or: please check next_second == NULL */ Node_t *list_merge(Node_t *head_first, Node_t *head_second) { Node_t *rv = head_first; Node_t *next_first = NULL, *next_second = NULL; #define LEN_DEFENSE #undef LEN_DEFENSE #ifdef LEN_DEFENSE Node_t **tail_chek = NULL;

    if(head_first == NULL)
    return head_second;
    #endif while(head_first && head_second) { next_first = head_first->next; next_second = head_second->next; head_first->next = head_second; head_second->next = next_first; #ifdef LEN_DEFENSE tail_chek = &head_second->next; #endif head_first = next_first; head_second = next_second; } #ifdef LEN_DEFENSE
    if(tail_check)
    {
         *tail_check = head_second;
    }
    #endif return rv; } Node_t *list_result(Node_t *head) { Node_t *head_halflist = list_half(head); head_halflist = list_reverse(head_halflist); head = list_merge(head, head_halflist); return head; }

    可是最后我把list_result中的最后的“return head" 写成了 ”return 0“,原因在于:

    我开始想让他们提供接口,我写出的程序进行调用,因此自己就写了main函数;后来,我想不一定要生成可执行程序,所以自己提供个接口给他们调用获得返回值,结果我只改了main的函数名和参数,最后的返回值忘改了。

    行百里者,半九十……

    还是好好看内存管理吧,Z先生指定的书还没看完……

    2013.9.29

    附:晚上同学说了下M的题,我看了下网上关于最后一天的解答,羞愧地无地自容啊,自己写的错误程序误导了他人;我昨天写的程序有误(反转),处理有冗余(合并)。如果有人看了我的随笔记录,如有错误,可以在文中指出,也可以发邮件给我……感谢

  • 相关阅读:
    WebView与 JS 交互方式
    ES6常用知识点
    Flash Builder 破解与开发环境配置
    如何修改默认浏览器
    基本数据类型和常用内建对象
    VS 2010 使用技巧
    javascript之事件驱动编程的几个基本概念
    javascript笔记之DHTML基础
    浏览器对象模型
    开发心得记录
  • 原文地址:https://www.cnblogs.com/openix/p/3344160.html
Copyright © 2020-2023  润新知