輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。
struct listnode
};分析:
注意關於鍊錶問題的常見注意點的思考:
1、如果輸入的頭結點是 null,或者整個鍊錶只有乙個結點的時候
2、鍊錶斷裂的考慮
方法一:非遞迴法
c++實現**如下:
listnode* reverselist(listnode* phead)
return reversehead; //返回新鍊錶的表頭
}
方法二:遞迴法(
)作為遞迴函式引數的結點指標,在其為空指標或者其next為空指標的時候遞迴終止,最後一次遞迴return的是最後鍊錶乙個節點指標,reversehead作為此節點指標的copy,返回給上乙個遞迴函式,如此迴圈,最後返回給初始函式。
從倒數第二個遞迴開始執行後面的語句:phead->next->next=phead; phead->next=null;
phead是遞迴函式的引數,是當前要處理的節點,對應鍊錶的倒數第二個節點指標,phead->next是最後乙個節點的指標,命名為lastnode,這樣看:(lastnode)->next = phead,phead->next = null 。
c++實現**如下:
listnode* reverselist(listnode* phead)
劍指offer 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...
劍指offer 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.非遞迴 struct listnode class solution listnode ppre null listnode p phead listnode pnext null while p null else p pnext return p...
《劍指offer》 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。之前錯誤的寫法,一直不明白 原因是移位的時候,pcurr移到下一位時,裡面的值已經變成反向指標了,所以不能成功移動,就迴圈巢狀進去了,所以還需要乙個變數pnext來儲存移位前的值。struct listnode class solution phead ...