思路:最簡單的一種想法就是遍歷鍊錶,用棧來儲存資料,然後從棧中取出,**比較簡單:
public arraylist
printlistfromtailtohead
(listnode listnode)
arraylist
ret =
newarraylist
<
>()
;while
(!stack.
isempty()
) ret.
add(stack.
pop())
;return ret;
}
我們還可以使用回溯法,回憶回溯法的特點,就是只有走到遞迴的出口才會有返回值,也就是遍歷到鍊錶最後乙個節點才會有返回值,那麼剛好符合我們題目從尾部輸出的要求:
public arraylist
ret =
newarraylist
<
>()
;public arraylist
printlistfromtailtohead
(listnode listnode)
public
void
helper
(listnode listnode)
helper
(listnode.next)
; ret.
add(listnode.val)
;}
這個**也可以簡化一下,要逆序列印鍊錶 1->2->3(3,2,1),可以先逆序列印鍊錶 2->3(3,2),最後再列印第乙個節點 1。而鍊錶 2->3 可以看成乙個新的鍊錶,要逆序列印該鍊錶可以繼續使用求解函式,也就是在求解函式中呼叫自己,利用的也是回溯的特性,但是這個沒有上面那個好理解:
public arraylist
printlistfromtailtohead
(listnode listnode)
return ret;
}
最後,還有一種方法,我們可以建立乙個虛擬的頭指標,然後將整個鍊錶從頭到尾往這個虛擬指標後面插,插完後,虛擬指標後面的節點就是整個鍊錶的逆序啦,點這裡可以看**便於理解哦(●ˇ∀ˇ●)
public arraylist
printlistfromtailtohead
(listnode listnode)
dummy = dummy.next;
while
(dummy != null)
return ret;
}//這種也可
public arraylist
printlistfromtailtohead
(listnode listnode)
// 構建 arraylist
arraylist
ret =
newarraylist
<
>()
; dummy = dummy.next;
while
(dummy != null)
return ret;
}
牛客網3 從尾到頭列印鍊錶
輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。public arraylist printlistfromtailtohead listnode listnode for int i a1.size 1 i 0 i return a2 需要注意a1.add listnode.val ...
牛客《劍指Offer》 從尾到頭列印鍊錶
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。依次從頭取出鍊錶上的節點,將遍歷的節點依次插入到向量的首部,從而實現鍊錶的翻轉。筆記 1.vector使用 1.宣告與定義 vectorivec 2.頭插入vector ivec.insert ivec.begin 6 struct listnode cl...
從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到 1時代表鍊錶輸入完畢。1本身不屬於鍊錶。輸出 對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節...