單向鏈表反轉(轉)

          轉自于http://www.cppblog.com/tx7do/archive/2009/01/06/71280.html

          題目:已知單向鏈表的頭結點head,寫一個函數把這個鏈表逆序 ( Intel)


          解答:
          我們假設單向鏈表的節點如下:
          template <typename T>
          class list_node
          {
          public:
          list_node 
          * next;
          T data;
          }
          ;

          這個題目算是考察數據結構的最基礎的題目了,有兩種方法可以解此題:

          方法一:
              void reverse(node*& head)
              
          {
                  
          if ( (head == 0|| (head->next == 0) ) return;// 邊界檢測
                  node* pNext = 0;
                  node
          * pPrev = head;// 保存鏈表頭節點
                  node* pCur = head->next;// 獲取當前節點
                  while (pCur != 0)
                  
          {
                      pNext 
          = pCur->next;// 將下一個節點保存下來
                      pCur->next = pPrev;// 將當前節點的下一節點置為前節點
                      pPrev = pCur;// 將當前節點保存為前一節點
                      pCur = pNext;// 將當前節點置為下一節點
                  }

              }

          這是一般的方法,總之就是用了幾個臨時變量,然后遍歷整個鏈表,將當前節點的下一節點置為前節點。


          方法二:
              node* reverse( node* pNode, node*& head)
              
          {
                  
          if ( (pNode == 0|| (pNode->next == 0) ) // 遞歸跳出條件
                  {
                      head 
          = pNode; // 將鏈表切斷,否則會形成回環
                      return pNode;
                  }


                  node
          * temp = reserve(pNode->next, head);// 遞歸
                  temp->next = pNode;// 將下一節點置為當前節點,既前置節點
                  return pNode;// 返回當前節點
              }
          這個方法是采用了遞歸算法,也就是在反轉當前節點之前先反轉其后繼節點,說白了其實就是利用函數的調用堆棧構建了一個臨時鏈表罷了,挺廢的一個算法,權當作是寫著好玩,沒有什么實在的意義。
          采用此算法需要注意的是,頭結點必須要傳入的是引用,因為在遞歸跳出的時候要切斷鏈表,否則鏈表將會形成一個回環。

          posted on 2009-05-12 17:51 蔣耘 閱讀(3826) 評論(1)  編輯  收藏 所屬分類: 數據結構與算法

          評論

          # re: 單向鏈表反轉(轉)[未登錄] 2013-08-29 00:39 fornever

          方法一中尾節點(翻轉前的頭結點)Next未置為NULL  回復  更多評論   


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


          網站導航:
           
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 剑川县| 阳新县| 民权县| 陕西省| 房产| 肥西县| 罗平县| 通辽市| 香港 | 大冶市| 枞阳县| 井陉县| 秭归县| 金沙县| 古交市| 衡山县| 共和县| 嘉定区| 开封市| 工布江达县| 柳州市| 莱阳市| 金乡县| 哈巴河县| 察隅县| 马关县| 凤冈县| 伊春市| 平邑县| 木兰县| 盐城市| 高邮市| 乐亭县| 毕节市| 桦川县| 津市市| 武功县| 六安市| 苗栗县| 聊城市| 西昌市|