1、迭代struct listnode
};
在遍歷列表時,我們需要將當前節點的 next 指標改為指向前乙個元素
前乙個元素沒有,所以要先儲存其前乙個元素
在更改引用之前,還需要另乙個指標來儲存後乙個節點
2、就地反轉法
把當前鍊錶的下乙個節點pcur插入到頭結點dummy的下乙個節點中,就地反轉。
dummy->1->2->3->4->5的就地反轉過程:
過程:prev連線下一次需要反轉的節點
反轉節點pcur
糾正頭結點dummy的指向
pcur指向下一次要反轉的節點
3、遞迴
對於遞迴演算法,最重要的就是明確遞迴函式的定義。具體來說,我們的reverse
函式定義是這樣的:
輸入乙個節點head
,將「以head
為起點」的鍊錶反轉,並返回反轉之後的頭結點。
參考:class solution
listnode* ret = reverselist(head->next);
head->next->next = head;
head->next = null; // 因為此時的head,最終是新鍊錶的尾部,所以要讓它指向null
return ret;}};
單鏈表翻轉
關於單鏈表的翻轉問題頗為困擾人。下面寫的程式只需遍歷每個節點一次,並且不需要構造輔助接點 通過new的方式 另外這個問題可以轉換為乙個迴圈鍊錶結構,很有意思。h struct node class cdatastruct cpp檔案 cdatastruct cdatastruct void cdat...
單鏈表翻轉
1,原理 使用p和q兩個指標配合工作,使得兩個節點間的指向反向,同時用r記錄剩下的鍊錶。p head q head next head next null 現在進入迴圈體,這是第一次迴圈。r q next q next p p q q r 第二次迴圈。r q next q next p p q q ...
單鏈表翻轉
相比之前的那個方法 206.reverse linked list 這個方法比較簡單,直接在鍊錶上面進行逆序 容易理解 此 是用於將帶頭結點的單鏈表進行逆序,思路 1.首先設p結點為第乙個有效結點 即頭結點的下乙個節點 q為p的下乙個節點,原因從後面可知。2.將所給節點從頭結點處斷開,然後讓p結點的...