kmp算法next計算方法 如何鏈表反轉(zhuǎn)?
如何鏈表反轉(zhuǎn)?單鏈表反轉(zhuǎn):例如,原來的鏈表是head->1->2->3->反轉(zhuǎn)后為NULL:head-> 3-> 2-> 1-> NULL實現(xiàn)代碼:#include問題
如何鏈表反轉(zhuǎn)?
單鏈表反轉(zhuǎn):例如,原來的鏈表是head->
1->
2->
3->反轉(zhuǎn)后為NULL:head-> 3-> 2-> 1-> NULL實現(xiàn)代碼:#include
問題:給出一個單向鏈表,并從頭到尾反轉(zhuǎn)。例如:a-B-C-D依次是D-C-B-a。分析:假設(shè)每個節(jié)點的結(jié)構(gòu)是:復(fù)制如下代碼:類節(jié)點{char valuenode next},因為在反轉(zhuǎn)鏈表時,我們需要更新每個節(jié)點的“next”值。但是,在更新下一個值之前,需要保存下一個值,否則無法繼續(xù)。因此,我們需要兩個指針分別指向前一個節(jié)點和下一個節(jié)點。在更新當(dāng)前節(jié)點的“next”值之后,我們向下移動這兩個節(jié)點,直到到達最后一個節(jié)點。代碼如下:public node reverse(node current){//initializationnode previousnode=nullnode nextnode=nullwhile(current!=null){//保存下一個nodenextnode=current.next//update當(dāng)前.next//update“下一步”的值當(dāng)前.下一個=previousNode//shift指針previousNode=currentcurrent=nextNode}return previousNode}上面的代碼使用非遞歸方法,也可以通過遞歸來解決。代碼如下:復(fù)制代碼如下:public node reverse(node current){if(current==null)|當(dāng)前.下一個==null)返回currentNode nextNode=當(dāng)前.nextcurrent.next=Nullnode reverserest=reverse(nextnode)return reverserest}遞歸方法實際上非常巧妙。它使用遞歸轉(zhuǎn)到鏈表的末尾,然后更新每個節(jié)點的下一個值(代碼的倒數(shù)第二句)。
如何使用遞歸和非遞歸方式反轉(zhuǎn)單向鏈表?
反轉(zhuǎn)單個鏈表。R示例:[R
advanced:可以迭代或遞歸地反轉(zhuǎn)鏈表。你能用兩種方法解決這個問題嗎?采用頭部插入法。R代碼
這個字符串的輸出,考慮正負序,使用鏈表,可以考慮使用雙鏈表。這樣,輸出效率就會更高。建議采用循環(huán)雙鏈表(前導(dǎo)節(jié)點),方便程序處理,簡化操作流程,步驟清晰,便于調(diào)試。主要功能可分為:1、結(jié)構(gòu)定義2、初始化列表3、輸出(正序、逆序)4、發(fā)布列表5、主要功能如下:C語言代碼編譯在VC6.0中通過:#include