Java实现反向输出链表
生活随笔
收集整理的這篇文章主要介紹了
Java实现反向输出链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
面試問題5:從尾到頭打印鏈表
????(2)遞歸的本身就是一個棧結構,所以這個問題也可以用遞歸來實現。每當訪問到一個結點的時候,我們先遞歸輸出它后 面的結點,直到遞歸到最后一個結點時,再返回來輸出結點自身。示例代碼: public class PrintLinkedList {public static void main(String args[]) {ListNode node1 = new ListNode();ListNode node2 = new ListNode();ListNode node3 = new ListNode();node1.data = 1;node2.data = 2;node3.data = 3;node1.next = node2;node2.next = node3;printListReverse(node1);}public static void printListReverse(ListNode headNode) {if (headNode != null) {if (headNode.next != null) {printListReverse(headNode.next);}}System.out.println(headNode.data);} } public class ListNode {public ListNode next;public int data; }
????用遞歸來實現雖然簡單,但是當鏈表非常長的時候,會導致遞歸函數的層數非常深,有可能導致棧溢出。因此用?;?循環實現的魯棒性好一些。
??? ????題目:輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值。
??? ????題目解析:一般從尾到頭打印鏈表結點的值的話,可以想到將鏈表結點的指針反轉過來,改變鏈表方向,這樣相當于從頭到尾輸出了,但是這樣就改變了鏈表的結構。打印通常只是一個只讀操作,并不希望改變鏈表的數據結構,顯然這樣的方法是不可行的。
????(2)遞歸的本身就是一個棧結構,所以這個問題也可以用遞歸來實現。每當訪問到一個結點的時候,我們先遞歸輸出它后 面的結點,直到遞歸到最后一個結點時,再返回來輸出結點自身。示例代碼: public class PrintLinkedList {public static void main(String args[]) {ListNode node1 = new ListNode();ListNode node2 = new ListNode();ListNode node3 = new ListNode();node1.data = 1;node2.data = 2;node3.data = 3;node1.next = node2;node2.next = node3;printListReverse(node1);}public static void printListReverse(ListNode headNode) {if (headNode != null) {if (headNode.next != null) {printListReverse(headNode.next);}}System.out.println(headNode.data);} } public class ListNode {public ListNode next;public int data; }
????用遞歸來實現雖然簡單,但是當鏈表非常長的時候,會導致遞歸函數的層數非常深,有可能導致棧溢出。因此用?;?循環實現的魯棒性好一些。
總結
以上是生活随笔為你收集整理的Java实现反向输出链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代理模式(续)
- 下一篇: java美元兑换,(Java实现) 美元