• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-161  評論-223  文章-30  trackbacks-0
               原題為某游戲公司試題,大意如下:  對于一個單向鏈表,試寫出找到它的倒序第m個元素(m >= 1)的函數,注意變量命名、注釋、時間復雜度、空間復雜度。注:要求寫出可編譯并可以運行通過的程序代碼。

              這道題的常規做法或者說首先想到直覺的方法M1是先求得鏈表的長度,即元素總個數n,然后問題轉化為求順序第n-m+1個元素。下面給出第2種方法M2:先求得順序第m個元素,用一指針P指向這個元素,用另一指針PR指向鏈表的頭部,現在好了,P和PR同時向右移動,直到P為空,則PR就是要求的倒序第m個元素,如果因m超越界限,則PR為空,表示沒找到,這樣一來,只需一次循環就夠了。C++代碼描述如下
             1 template<typename T>
             2 struct Node
             3 {  
             4     T  data;    /**////< 數據
             5     Node* next;  ///< 指向下一結點的指針
             6 } ;

             7 
             8 template<typename T>
             9 Node<T>* ReverseFind(Node<T>* head, size_t m)
            10{
            11    size_t  n = 0;
            12    Node<T> *p, *pR = NULL;
            13    for (p = head;p;p = p->next)
            14    {
            15        if (++== m)
            16        {
            17            pR = head;
            18            continue;
            19        }

            20        if (pR)
            21        {
            22            pR = pR->next;
            23        }

            24    }

            25    return pR;
            26}
              現在分析這2種方法的時間復雜度,假設鏈表元素個數為N,所求倒序為第M元素,N>=M,則M1方法為0(N)+0(N-M)=0(2N-M),M2方法為O(M)+O(N-M)=0(N),因此M2快于M1。
            posted on 2011-06-24 11:40 春秋十二月 閱讀(2555) 評論(11)  編輯 收藏 引用 所屬分類: Algorithm

            評論:
            # re: 求單向鏈表倒序第m個元素 2011-06-24 12:30 | coreBugZJ
            贊一個  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-24 16:45 | paw
            額,,考研數據結構題。。。  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-24 23:57 | 魚吃貓
            頂一個~  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素[未登錄] 2011-06-25 12:06 | 英雄哪里出來
            不錯,贊一個~~  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素[未登錄] 2011-06-25 13:39 | kaka
            第一個指針從頭移動到m,和第二個指針一起再移動到尾部。

            第二個指針和第一個指針一起移動。

            只不過將一個指針大于一次遍歷的操作分解成兩個指針操作。

            這樣算是一次遍歷?  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-25 23:36 | 夢提
            是一次遍歷,因為時間上是同步的。@kaka
              回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-26 08:47 | 搞笑
            這個也太搞笑了?效率是一樣的,還竟然有:“這樣效率不高”的說法。  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-26 13:54 | temp
            是一樣的,兩個指針分別遍歷。  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-26 15:24 | Arcko
            貌似需要遍歷的確實是一樣的多,不過換個思路考慮也很好  回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-06-27 10:09 | megadeath
            使用遞歸方式(示例代碼,無任何錯誤檢查),把for語句也消隱掉。

            static int nOrder = 0;
            template <typename ITERATOR, typename UINT>
            void F(ITERATOR begin, ITERATOR end, UINT M)
            {
            ITERATOR it = begin;
            if (begin != end)
            F(++begin, end, M);

            if (++nOrder == ++M)
            cout << *it << endl;
            }
              回復  更多評論
              
            # re: 求單向鏈表倒序第m個元素 2011-07-01 11:06 | 有霧
            我也感覺效率一樣的。第二個里面,同樣要把P移動到鏈表尾,這樣才能獲得size。所以不存在O(M),同樣是O(N)啊。@搞笑
              回復  更多評論
              
            精品久久亚洲中文无码| 日韩精品久久久久久免费| 香蕉久久夜色精品国产小说| 久久国产精品99精品国产987| 亚洲欧美精品伊人久久| 中文成人无码精品久久久不卡| 中文字幕人妻色偷偷久久| 久久精品国产亚洲综合色| 亚洲人AV永久一区二区三区久久| 久久久久久久波多野结衣高潮| 久久综合九色综合欧美狠狠| 日韩十八禁一区二区久久| 97精品久久天干天天天按摩| 亚洲国产日韩欧美久久| 99热都是精品久久久久久| 久久精品国产男包| 久久久久久毛片免费看| 久久精品国产亚洲AV嫖农村妇女| 午夜精品久久久久成人| 一本伊大人香蕉久久网手机| 久久99热只有频精品8| 无码国内精品久久综合88| 成人午夜精品久久久久久久小说| 欧美一区二区三区久久综| 亚洲国产日韩综合久久精品| 国产真实乱对白精彩久久| 久久美女网站免费| 99久久99久久久精品齐齐 | 久久国产色AV免费观看| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品亚洲男人的天堂| 久久综合久久久| 大香网伊人久久综合网2020| 青青草原综合久久| 久久综合九色综合97_久久久 | 国产香蕉久久精品综合网| 国产精品欧美亚洲韩国日本久久| 久久99国产精品久久99果冻传媒| 亚洲AV成人无码久久精品老人| 影音先锋女人AV鲁色资源网久久| 午夜精品久久久久久影视riav|