• 线性表——单链表小结(腾讯面试题)(4)


    虽然数据结构与算法很枯燥,但是以后的软件开发笔试题考的都是这些呀。。。。现在测试完成是自动化测试,x老师在公司在开发测试一体化,只需要一个人在那里点一下run,脚本就会跑起来,有问题了,就会实时地传送到工程师那边。。执行的工作也太。。。木有水平了。。。so,以后真的是越来越自动化,没有扎扎实实的算法基础,怎么行啊。。好好努力啊,还说研二的暑假要去华为实习滴啦。。。。这也得这个学期把论文捯饬出来才行啊。。。。抓狂!!

    腾讯的面试题目:快速找到未知长度单链表的中间节点。

    常规方法:

    (1)遍历一遍单链表,计算单链表的长度L

    (2)计算中间节点j为L/2,(或者当L为奇数时:(L-1)/2)

    (3)从来开始查找,直到查找到第j个节点

    Status findMidNode(linklist *L,ElemType *e)
    {
        linklist p;
        int count = 0;
        int midCount = 0;
        int i = 0;
        p = *L;
        if (!p)
        {
            return Error
        }
        while( p->next != NULL)        //遍历链表,得到链表长度
        {
            p = p->next;
            count += 1;
        }
        midCount = int (count/2);    //得到中间结点的个数
        p = *L;
        for( ;i < midCount; i++)
        {
            P = P->next;
        }
        *e = p->data;return *e;      //返回中间节点
    }

    高级方法:

    (1)定义两个指针,都从头结点出发,但是一个是快指针,一个是慢指针,快指针一次走两个,慢指针一次走一个

    当快指针遍历完链表时,慢指针正好走到,链表的中间

    Status findMidNode(linklist *L,ElemType *e)
    {
        linklist p,q;
        p = *L;
        q = *L;
        if (!p)
        {
            return Error
        }
        while( p->next != NULL)
        {
            if (p->next->next != NULL)
            {
                p = p->next->next;
           q = q->next
    } else { p = p->next; } }
      *e = q->ata;
    return *e }

    时间复杂度比较:

    常规方法是:O(3n/2)

    高级方法是:O(n/2)

  • 相关阅读:
    晕倒的AIX
    MySQL Replication(zt)
    pxe启动网络安装CentOS(win平台)(zt)
    几句比较实用的script
    改注册表方式防DDOS攻击[ZT]
    一个免费空间列表相对集中的地方
    CREE LED的一个小资料
    下一步准备研究的东西:rsync远程同步
    PXE启动安装Linux (zt)
    系统调用
  • 原文地址:https://www.cnblogs.com/shixiaomiao/p/4023144.html
Copyright © 2020-2023  润新知