posts - 27,  comments - 3,  trackbacks - 0
          1. 如何判斷一個鏈表是否帶環
          2. 如何找到鏈表中的環的第一個節點

          第一個問題很好找,就是設置兩個指針,p , q 。 其中 p每次向前移一個,q每次向前移兩個,如果q能追的上p,則鏈表帶環,時間復雜度為O(n), 空間復雜度為O(1)
          第二個問題是室友在面某投行IT部門時的題目(可惜啊,俺過不了該投行的電話面試)。這個題目最容易的做法就是用一個數組記錄遍歷過的節點,然后第一次遍歷到已經訪問過的節點時就可以了。據室友說,題目要求空間復雜度為O(1) . 因此顯然不能用這個方法了。
          我想了一下,一開始想了一個O(n*n)的方法,后來受那個求兩個鏈表第一個公共節點的題目的啟發,想到了一個O(n)的算法,
          大概就是這樣:找到環中的任意一個節點,這個很容易找,在判斷鏈表是否包含環的步驟中,當p,q 相遇時,p和q必定在環內,不妨取p,再設r為p的下一個節點,在p和r之間將環打斷,這時可以得到兩個鏈表? h...p, r...p, (h為鏈表頭結點), 然后再將鏈表 h..p逆轉(此時r..p必然變為 r...h),求得鏈表p...h與r..h的第一個公共子節點就是所求的點。最后將p..h逆轉回來,將p和r連接上,即可得到原鏈表。空間復雜度為O(1), 時間復雜度為O(n).
          posted on 2011-05-15 16:10 Jeff Lee 閱讀(653) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁明县| 裕民县| 阳城县| 名山县| 苗栗县| 鹿邑县| 贵阳市| 迁西县| 广饶县| 从江县| 临夏市| 泊头市| 清河县| 澳门| 广州市| 辽宁省| 太康县| 莱西市| 陆川县| 宣城市| 黄骅市| 潼南县| 威远县| 镇巴县| 东海县| 通州区| 武冈市| 商洛市| 济南市| 道孚县| 繁峙县| 大田县| 普格县| 彭水| 封丘县| 蒙阴县| 邵阳县| 邹平县| 屯昌县| 丹巴县| 嘉禾县|