反转链表(TX)
思路
首先我們想要的效果圖如下
首先定義一個cur指針,指向頭結點,再定義一個pre指針,初始化為null。
然后就要開始反轉了,首先要把 cur->next 節點用tmp指針保存一下
因為接下來要要處理該節點,也就是改變 cur->next 的指向了,將cur->next 指向pre ,然后cur要移動到下一位置繼續處理節點
再接下來,就是循環走如下代碼邏輯了,繼續移動pre和cur指針。
最后,cur 指針已經指向了null,循環結束,鏈表也反轉完畢了。此時我們return pre指針就可以了,pre指針就指向了新的頭結點
雙指針法
class Solution { public:ListNode* reverseList(ListNode* head) {ListNode* cur=head;ListNode* pre=nullptr;ListNode* temp=nullptr;while(cur){//1-保存一下 cur的下一個節點,因為接下來要改變cur->nexttemp=cur->next;//2- 翻轉操作cur->next=pre;//3-更新pre 和 cur指針pre=cur;cur=temp;}return pre;} };遞歸法
class Solution { public:ListNode* reversal(ListNode* pre,ListNode* cur){if(cur==nullptr) return pre;ListNode* temp=cur->next;cur->next=pre;// 可以和雙指針法的代碼進行對比,如下遞歸的寫法,其實就是做了這兩步return reversal(cur,temp);}ListNode* reverseList(ListNode* head) {return reversal(nullptr,head);} };總結