zoukankan      html  css  js  c++  java
  • 一道笔试题

    一个链表,节点里面的内容是字符串,如a->b->c->d->e,要求返回链表如下abcde->bcde->cde->de->e

    数据结构:

    1 struct NODE
    2 {
    3     char str[50];
    4 
    5     NODE *next;
    6 };

    首先直观的考虑可以用一个两层循环,时间复杂度O(n^2),当然这个效率是不被接受的

     1 NODE *Linked(NODE *head)
     2 {
     3     assert (head != NULL);
     4 
     5     for (NODE *p1 = head->next; p1 != NULL; p1 = p1->next)
     6     {
     7         for (NODE *p2 = p1->next; p2 != NULL; p2 = p2->next)
     8         {
     9             strcat (p1->str, ",");
    10 
    11             strcat (p1->str, p2->str);
    12         }
    13     }
    14 
    15     return (head);
    16 }

    这个效率地是因为我们重复的访问了很多节点,如果我们从最后一个节点开始处理的话,每个节点只需要前一个节点的信息,这样可以将事件复杂度降低到O(n),步骤是先反转链表,再处理链表,最后再将链表反转回来。

     1 NODE *LinkedAnother(NODE *head)
     2 {
     3     assert (head != NULL);
     4 
     5     Reverse (head);
     6 
     7     NODE *p1 = head->next;
     8     NODE *p2 = p1->next;
     9 
    10     while ((p1 != NULL) && (p2 != NULL))
    11     {
    12         strcat (p2->str, ",");
    13         strcat (p2->str, p1->str);
    14 
    15         p1 = p2;
    16         p2 = p1->next;
    17     }
    18 
    19     Reverse (head);
    20 
    21     return (head);
    22 }

  • 相关阅读:
    用jQuery开发插件详解
    position:absolute和float会隐式的改变display类型
    链家H5项目总结
    jQuery中的选择器
    jqeury实现全选和反选
    $.extend(),与$.fn.extend() 讲解(一)
    mybatis用distinct进行查询的问题
    mybatis 动态Sql的模糊查询
    mysql
    @RequestParam和@PathVariable的区别
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3041336.html
Copyright © 2011-2022 走看看