方法一:非遞迴方法,利用輔助指標,時間複雜度為o(n)
程式如下:
template struct上面的過程如果不畫圖的話,很容易搞暈,所以我繪製了下面的過程圖便於理解:listnode
};template
void reverselist(listnode *node)
currpos->next = prevpos; //
注意最後一步
return
currpos;
}
方法二:遞迴方法
template struct遞迴方法還是比較難以理解的,知道棧幀的概念的話會容易很多。每次函式呼叫都會在棧空間push一塊空間,這個空間會儲存該函式的形參和區域性變數,當函式結束後,才會pop出這塊空間。也就是說,每次遞迴呼叫中的形參 currpos,區域性變數nextpos都儲存下來,直到基準情形出現。會產生多個currpos、nextpos變數,加上函式呼叫產生的其他指標和空閒空間等等。會占用更多的記憶體空間,而且函式呼叫會產生更多操作,時間開銷很大。當然,並不排除有些編譯器會優化掉遞迴的函式呼叫過程。所以,遞迴方法並不推薦。遞迴的圖示繪製相對複雜,這裡不再演示。listnode
};template
void reverselist_recur(listnode *currpos)
單鏈表逆置
單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...
單鏈表逆置
name 單鏈表逆置 author 巧若拙 date 22 11 14 16 13 description 分別用遞迴和非遞迴兩種方式實現單鏈表 不含頭結點 的逆置 include include include typedef char elemtype typedef int status 函式...
單鏈表逆置
最近在leetcode oj上刷題,將一些演算法題的解法記錄下來,也期待一些新的更好的方法。題目是這樣滴 206.reverse linked list reverse a singly linked list.hint a linked list can be reversed either it...