反轉單鏈表,可以使用迭代或者遞迴的方法
具象化反轉單鏈:
反轉前:
反轉中:
反轉後:
(ps:上述搬運自 鏈表面試題(一):反轉鍊錶的演算法實現)
以上就是每乙個節點都需要做的事情了,不管是迭代的方法還是遞迴的方法都是這樣的步驟。 然而需要考慮的還不止這麼多,比如第乙個節點的上乙個節點的處理,以及方法結束時的返回值的處理。
package algorithm9;
import algorithm6.listnode;
public
class
algorithm9
/**方法一:迭代
* 注意點:tempnext == null 時,說明已經迭代到最後乙個節點了,這時為headnode賦值
* @param listnode
* @return
*/public
static listnode reverselistnode
(listnode listnode)
return headnode;
}/**方法二:遞迴
* 注意點:listnode.next == null 時,說明已經迭代到最後乙個節點了
* 與迭代方法不同的是,這裡沒有固定區域性變數來記錄頭結點,所以就需要將整個鍊錶串成乙個完整的鍊錶
* @param listnode
* @param pre
* @return
*/public
static listnode reverselistnode2
(listnode listnode, listnode pre)
listnode tempnext = listnode.next;
listnode.next = pre;
pre = listnode;
listnode = tempnext;
return
reverselistnode2
(listnode, pre);}
public
static listnode getlistnode1()
}
演算法題 反轉單鏈表
時間限制 1秒 空間限制 32768k 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。解法一.迴圈反轉鍊錶 非遞迴法 整體思路就是,從原鍊錶的頭部乙個乙個取節點並插入到新鍊錶的頭部 p始終指向要反轉的結點 newhead 指向反轉後的首結點 每反轉乙個結點,把p結點的next指向newhead,ne...
單鏈表反轉演算法
struct listnode 想到兩種方法 想法是構建乙個新的單鏈表,然後遍歷原來的單鏈表,每遍乙個就把它插入到最新的單鏈表的開頭,下面是 struct listnode reverselist struct listnode list temp list last null while temp...
C 演算法 反轉單鏈表
反轉單鏈表,我使用了兩種方法,不過他們都很相近。宣告 class clist 宣告反轉單鏈表函式 void reversesll clist clist prenode nullptr void csinglelinkedlist reversesll clist node,clist prenod...