小菜鳥的單向鏈表反轉

來源:互聯網
上載者:User

標籤:ext   資料   問題   演算法   表   代碼   

  關於單向鏈表的反轉想必大家都很熟了,以前一直用遞迴的方法寫的,還是挺好寫的,但是後來又在網上瞄了一眼非遞迴方法的實現,當時以為那個代碼是正確的,也沒驗證,後來就不了了之。

  昨天下午開始寫這個代碼,最後老發現出問題,今天早上起來理了一遍,終於發現癥結所在。

  舉個例子吧:

  1->2->3->4->5->6       我反轉後的結果應該是: 6->5->4->3->2->1

  我的演算法是這樣的(語死早,大家不要笑,我就用過程圖表達吧):

  1->2->3->4->5->6

  2->1->3->4->5->6

  3->2->1->4->5->6

  4->3->2->1->5->6

  5->4->3->2->1->6

  6->5->4->3->2->1

  其實整個過程不複雜,但是吧,之前一直沒把圖畫出來,理所當然的在空想,我把我的感觸寫下來吧:

  1:注意1這個位置,這個位置起著串連後面未操作的資料的作用,相當重要,這是我之前代碼一直出問題的原因

  2:注意每次頭結點的變化

  3:到最後的時候尾節點變成了1位置的節點

 

  好了,放代碼了,新手寫代碼,大家請多多指教O(∩_∩)O哈!

struct Node   // 結點結構
{
  int m_data;
  Node* m_next;
};

struct List   // 單向鏈表結構
{
  Node* m_head;
  Node* m_tail;
  size_t m_length;

};

// 單向鏈表反轉
  Node* first = m_head;                        // 兩個待交換結點的第一個結點    
  Node* second = m_head->m_next;     // 兩個待交換結點的第二個結點
  Node* next = second->m_next;          // 下一個要交換的節點
  Node* last = m_head;                         // 存放上面的“1”對應的節點

  //以下是第一次交換,是第一個結點和第二個結點的交換

  second->m_next = first;   // 後面的節點改變指向指向前面的節點
  first->m_next = next;      // 前面的節點改變指向,指向下一個要交換的節點
  first = second;                //  這一行和下一行做的操作就是把後面的節點和下一個要交換的節點放到first和second中用來操作
  second = next;
  next = next->m_next;   //下下個要交換的節點

  while(second != NULL)
  {
    second->m_next = first;  // 同上面的注釋
    last->m_next = next;    //這一塊就比較坑啦,大家要注意看我上面的圖中1所在的位置,是1在不停地往後走,first對應的資料其實它的後結點是不會變了
    first = second;       // 上面已經有注釋
    second = next;
    if (next != NULL)
    {
      next = next->m_next;
    }
  }
  m_head = first;
  m_tail = last;

  

  哎,我這表達能力啊,太捉急了,不過總算是寫完了。。。謝謝大家捧場。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.