逆序打印單鏈表

題目描述:

逆序打印單鏈表,要求不能改變鏈表結(jié)構(gòu)。

思路分析:

由于單鏈表只能順序遍歷(從頭到尾遍歷)而不能逆向遍歷,所以,要逆序打印單鏈表,則必需要用到先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),我們很容易想到。

而運(yùn)用了棧結(jié)構(gòu)的實(shí)現(xiàn)主要有兩種:

1. 遞歸:遞歸內(nèi)部包括了一個(gè)方法調(diào)用。

2. Stack:Java中棧數(shù)據(jù)結(jié)構(gòu)的默認(rèn)實(shí)現(xiàn)。

代碼實(shí)現(xiàn):

方法1:遞歸實(shí)現(xiàn)

// 使用遞歸實(shí)現(xiàn)鏈表逆序打印
public void reversePrint(LinkedNode node) {
    if (node == null) {
        return;
    }
    reversePrint(node.next);
    System.out.println(node.element);
}

方法2:循環(huán)實(shí)現(xiàn)

// 使用棧(Stack)逆序打印單鏈表
public void reversePrint(LinkedNode header) {
    Stack<LinkedNode> stack = new Stack<>();
    LinkedNode currentNode = header;
    while (currentNode != null) {
        stack.push(currentNode);
        currentNode = currentNode.next;
    }
    while (stack.size() > 0) {
        LinkedNode node = stack.pop();
        System.out.println(node);
    }
}

總結(jié):

由于單鏈表無(wú)法逆序遍歷,而且題目要求不得改變鏈表結(jié)構(gòu),因此只能使用先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)(棧)。

而遞歸方法的調(diào)用順序就正好是一個(gè)先進(jìn)后出的結(jié)構(gòu),因此可以使用遞歸實(shí)現(xiàn)。當(dāng)然,也可以借助外部存儲(chǔ)空間實(shí)現(xiàn),比如棧,集合等,當(dāng)然,棧比集合是更合適的選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容