鏈表的反轉
題目:定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表並返回反轉後鏈表的頭節點,鏈表的定義如下:
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 }