牛客解題思路 從尾到頭列印鍊錶

2021-10-23 12:06:33 字數 1620 閱讀 6093

思路:最簡單的一種想法就是遍歷鍊錶,用棧來儲存資料,然後從棧中取出,**比較簡單:

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本身不屬於鍊錶。輸出 對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節...