鏈表的反轉

鏈表的反轉

題目:定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表並返回反轉後鏈表的頭節點,鏈表的定義如下:

struct ListNode{

  int value;

  ListNode* next;

};

  鏈表反轉的過程中要防止鏈表的斷裂,假設每次都必須保存當前掃描節點的上一個結點,和下一個節點,不停的掃描此節點是否爲nullptr,在循環中每次都定義一個臨時的結點來保存,當前結點的下一個節點,然後在循環中判斷此臨時節點是否爲空,若爲空,則證明,此節點就是要找的最後要作爲的頭節點,否則的話,把當前結點的next指向上一個結點,然後此結點又作爲新的上一個結點,把臨時的節點賦給當前結點,重新的循環。跳出循環後返回最後一個結點。

 1 struct ListNode{
 2     int value;
 3     ListNode *next;
 4 };
 5 ListNode* ReverseList1(ListNode* phead)
 6 {
 7     ListNode* Node = phead;//當前檢測的結點
 8     ListNode* PreNode = nullptr;//當前結點的上一個結點
 9     ListNode* ReHeadNode= nullptr;//最終要會返回的頭結點
10     while (Node != nullptr)
11     {
12         ListNode* TempNext = Node->next;//臨時結點,用來保存下一位置
13         if (TempNext == nullptr)//若下一位置爲空,證明此結點就是要返回的頭結點
14             ReHeadNode = Node;
15         Node->next = PreNode;//指針反轉
16         PreNode = Node;//當前結點作爲新的上一結點
17         Node = TempNext;//當前結點跳到下一位置,繼續檢測
18     }
19     return ReHeadNode;//返回頭結點
20 }

 

posted @ 2016-04-24 23:41 General_up 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章