青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

找出單向鏈表的倒數第m個元素

鏈表節點:
class Node
{
public:
    
int        data;
    Node
*    next;

public:
    Node(
int n) : data(n), next(0)
    
{
    }


    Node() : data(
0), next(0)
    
{
    }


    Node
* InsertAfter( int _data )
    
{
        Node
* newnode = new Node(_data);

        newnode
->next = next;
        next 
= newnode;

        
return newnode;
    }

}
;


低效的查找算法:
Node* FindMToLastNode(Node* pHead, int m)
{
    
// 第一次遍歷,獲取鏈表的計數
    Node* pCurrent = pHead;
    
int nCount = 0;
    
while (pCurrent)
    
{
        
++nCount;
        pCurrent 
= pCurrent->next;
    }


    
// 防止越界
    if (m > nCount) return 0;

    
// 第二遍遍歷,獲取倒數第m個節點,也就是順數滴n個節點
    int n = nCount - m + 1;
    nCount 
= 0;
    pCurrent 
= pHead;
    
while (pCurrent)
    
{
        
++nCount;
        
if (nCount == n)
        
{
            
return pCurrent;
        }


        pCurrent 
= pCurrent->next;
    }


    
return 0;
}
這個算法很低效,要循環列表兩次,從時間上來說,消耗很大.從空間上,需要3個臨時變量,消耗也有點大.


高效的查找算法:
Node* FindMToLastNode(Node* pHead, int m)
{
    
// 查找到第m個元素
    Node* pCurrent = pHead;
    
for (int i = 0; i < m; ++i)
    
{
        
if (pCurrent)
        
{
            pCurrent 
= pCurrent->next;
        }

        
else
        
{
            
return NULL;
        }

    }


    
// 一起繼續遍歷到鏈表尾部,
    
// 現在pFind和pCurrent之間間隔了m個元素,
    
// 所以,當pCurrent遍歷到尾部的時候,
    
// pFind就到了倒數第m個元素的位置上.
    Node* pFind = pHead;
    
while (pCurrent)
    
{
        pFind        
= pFind->next;
        
// 間隔m個元素
        pCurrent    = pCurrent->next;
    }


    
return pFind;
}
這個算法果然精妙!空間上只需要開銷兩個臨時變量,時間上只需要循環鏈表一遍,也就是O(n)!
我太笨了,居然沒有想到如此絕妙的算法.

posted on 2010-06-02 12:10 楊粼波 閱讀(1224) 評論(7)  編輯 收藏 引用

評論

# re: 找出單向鏈表的倒數第m個元素[未登錄] 2010-06-02 18:47 R

pFind = pFind->next;
// 間隔m個元素
pCurrent = pCurrent->next;
實際上是遍歷兩遍,時間復雜度和最簡單的想法沒有區別  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-02 19:30 楊粼波

@R
的確,這塊代碼算起來的確是遍歷了兩遍.
其實在空間上還可以節省掉一個臨時變量的,那就是pFind,可以利用pHead,不過這樣的話,閱讀起來就會讓人誤解.  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-02 20:30 溪流

以前面試題做到過,當時不會,后來知道這個答案了也驚嘆了一下。
現在看到樓上們說的,確實是兩遍,跟最笨的方法——找到結尾回頭找——相比,也根本好不到哪里去。。。學習了……  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-02 21:23 楊粼波

呵呵,我也是做的面試題.
還是這個算法比較符合我的理想中的美學.  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-10 10:35 imok

這個方法明顯比那種遍歷兩次的方法要高效,而不是根本好不到哪里去  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-10 15:19 楊粼波

我把兩種算法都放出來了,
這個一比較就很明白了.
第一個算法,需要循環鏈表兩次.
第二個算法,只需要循環鏈表一次就足夠了.

另外附上遍歷的概念解釋:
所謂遍歷(Traversal)是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴于具體的應用問題。  回復  更多評論   

# re: 找出單向鏈表的倒數第m個元素 2010-06-10 15:25 楊粼波

第二種算法,至少要少訪問鏈表的節點m-1次.
可以直接去profile獲取直觀的時間損耗.  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲最新在线视频| 久久亚洲一区二区| 久久精品道一区二区三区| 亚洲一区二区精品| 亚洲欧美另类在线| 久久国内精品视频| 女生裸体视频一区二区三区| 免费在线观看一区二区| 亚洲日本国产| 欧美激情一区二区三区在线视频观看| 欧美激情亚洲激情| 亚洲私人黄色宅男| 久久亚洲综合色| 欧美日韩精品系列| 国产精品毛片a∨一区二区三区|国 | 欧美一区二区网站| 理论片一区二区在线| 91久久国产综合久久蜜月精品 | 日韩午夜三级在线| 欧美一站二站| 亚洲黄色三级| 午夜精品免费| 欧美激情视频在线播放| 国产精品自拍网站| 亚洲精品你懂的| 久久久久久久久综合| 亚洲精品在线视频| 久久婷婷蜜乳一本欲蜜臀| 欧美特黄视频| 91久久黄色| 久久久久久久成人| 一区二区三区四区五区在线| 久久综合久久综合久久| 国产精品日本欧美一区二区三区| 亚洲激情在线视频| 欧美激情1区| 国产精品一区二区三区久久| 亚洲巨乳在线| 久久亚洲国产精品一区二区| 99精品国产福利在线观看免费| 久久伊人免费视频| 国产无一区二区| 亚洲天堂男人| 亚洲精品午夜| 欧美精品99| 亚洲乱码国产乱码精品精可以看| 久久综合亚州| 欧美日精品一区视频| 国产欧美日韩另类视频免费观看| 日韩亚洲欧美高清| 亚洲二区视频| 久久婷婷久久一区二区三区| 国内激情久久| 久久亚洲综合色一区二区三区| 亚洲综合精品一区二区| 欧美性猛交xxxx乱大交蜜桃 | 免费成人网www| 在线观看国产精品淫| 久久免费高清视频| 久久电影一区| 国自产拍偷拍福利精品免费一| 欧美中文字幕| 久久精品72免费观看| 国内偷自视频区视频综合| 久久久五月婷婷| 久久久久久久久久久一区| 国内偷自视频区视频综合| 久久精品视频在线看| 久久久999精品| 在线观看日韩专区| 欧美国产高潮xxxx1819| 欧美顶级大胆免费视频| 日韩视频一区二区在线观看 | 一区二区电影免费在线观看| 91久久精品国产| 欧美色播在线播放| 久久福利精品| 毛片一区二区| 中国av一区| 久久av免费一区| 亚洲美女在线国产| 在线亚洲一区| 国产亚洲一二三区| 亚洲电影欧美电影有声小说| 欧美视频在线观看一区| 久久久亚洲高清| 欧美精品亚洲二区| 久久av一区二区| 欧美电影免费观看网站| 午夜在线视频一区二区区别| 一级日韩一区在线观看| 亚洲女与黑人做爰| 在线欧美小视频| 在线亚洲高清视频| 黄色小说综合网站| 亚洲欧洲精品一区二区三区波多野1战4 | 一区二区三区|亚洲午夜| 亚洲欧美日韩另类精品一区二区三区| 亚洲欧美一区二区原创| 国内精品嫩模av私拍在线观看| 欧美高清影院| 国产精品你懂的在线欣赏| 免费在线成人| 欧美性做爰毛片| 欧美阿v一级看视频| 国产精品久久一区二区三区| 久久久www免费人成黑人精品 | 欧美四级在线观看| 免费不卡中文字幕视频| 国产精品国产三级国产专区53| 美女主播视频一区| 国产美女精品免费电影| 亚洲精品欧美日韩专区| 亚洲第一在线| 性色av一区二区三区| 亚洲美女福利视频网站| 久久aⅴ国产欧美74aaa| 欧美一区二区成人6969| 免费在线观看精品| 久久久国产成人精品| 国产精品自拍三区| 在线中文字幕一区| 亚洲免费av观看| 欧美不卡视频一区| 欧美jizzhd精品欧美喷水| 国产在线精品一区二区夜色| 亚洲欧美一级二级三级| 亚洲女人天堂av| 欧美天堂亚洲电影院在线播放 | 欧美专区在线观看| 国产精品美女999| 亚洲美女在线视频| 一区二区三区不卡视频在线观看| 久久久久国产精品麻豆ai换脸| 欧美一区二区三区日韩| 国产精品久久久久影院色老大 | 欧美看片网站| 日韩午夜激情电影| 日韩一级黄色片| 欧美在线免费观看视频| 国产乱理伦片在线观看夜一区| 亚洲欧美成人网| 欧美一区三区三区高中清蜜桃| 国产农村妇女精品一区二区| 欧美一区二区三区免费视频| 久久久99国产精品免费| 国产真实精品久久二三区| 久久久精品一品道一区| 免播放器亚洲一区| 影音先锋欧美精品| 欧美成年人视频| 亚洲作爱视频| 欧美主播一区二区三区| 国产欧美日韩综合精品二区| 欧美在线视频全部完| 欧美激情黄色片| 亚洲视频在线观看免费| aa国产精品| 久久aⅴ乱码一区二区三区| 久久久综合网| 亚洲精品国精品久久99热| 欧美国产视频在线| 一区二区三区日韩在线观看 | 久久精品99国产精品| 伊人精品成人久久综合软件| 欧美成人免费va影院高清| 亚洲天堂第二页| 欧美aaaaaaaa牛牛影院| 一区二区三区 在线观看视| 国产伦精品一区二区三区| 久久这里只有精品视频首页| 亚洲精品在线观| 久久久福利视频| av成人动漫| 黄色日韩网站视频| 国产精品成人一区二区三区吃奶 | 欧美日本国产一区| 欧美专区在线播放| 日韩视频永久免费| 久久综合九色欧美综合狠狠| 99视频超级精品| 黄网站色欧美视频| 国产精品美女诱惑| 欧美成人精品福利| 亚洲欧美日韩人成在线播放| 亚洲毛片网站| 欧美黑人多人双交| 欧美在线免费播放| 亚洲在线免费观看| 亚洲日本aⅴ片在线观看香蕉| 国产精品女主播| 欧美日韩高清在线观看| 老司机aⅴ在线精品导航| 欧美一区二区三区久久精品茉莉花| 亚洲美女毛片| 亚洲黄色在线看| 欧美激情乱人伦| 免费看的黄色欧美网站| 久久av最新网址| 欧美一区二区三区四区高清|