題目:給你單連結串列的頭節點 head
,請你反轉連結串列,並返回反轉後的連結串列。
思路:第一步,首先定義一個空結點用來儲存臨時指標,然後定義一個前指標cur指向頭結點,定義一個後指標指向NULL,
也就是頭結點的前面一位。
第二步,迴圈檢測前指標cur的值,直到該指標指向連結串列尾部,即為空時,反轉結束。
第三步,開始移動雙指標,首先儲存頭結點的下一個結點位置,然後反轉前指標的指向,使其指向後指標。此時連結串列的頭結點指向的是頭結點的前一個結點,即NULL。
然後依次更新前、後指標的位置,向後移動一位,依次迴圈。
第四步,最後前指標cur指向NULL,後指標指向的是最後一個結點,而此時最後一個結點就變為了頭結點,返回後指標pre即可。單連結串列反轉完成。
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* temp; ListNode* cur=head; ListNode* pre=NULL; while(cur) { temp=cur->next; cur->next=pre; pre=cur; cur=temp; } return pre; } };