這個題目搞了一段時間,由於解法好多,好比:是用遞歸法呢仍是循環呢,要不要使用棧呢等等.. 因此,每一種想法都寫一下吧,還有一點點的小細節什麼的。node
這個題目就不用解釋了吧,舉個例子:輸入1→2→3→4→5,輸出5→4→3→2→1。後端
方法一:棧+循環spa
具體的思路:輸入一個鏈表1(特色:先進先出) → 建一個棧(特色:先先後出)和一個鏈表2 → 把鏈表一的數據高進棧 → 把棧裏的東西倒進鏈表2 → 結束!!(不明白看代碼:註釋很詳細)指針
代碼實現:code
using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } }*/ class Solution { // 返回從尾到頭的列表值序列 //首先輸入一個名爲printListFromTailToHead的鏈表;List<int>爲鏈表類型;ListNode listNode分別爲指針和數據 public List<int> printListFromTailToHead(ListNode listNode) { // write code here //定義一個名爲stack的棧 Stack<int> stack = new Stack<int>(); //定義一個名爲list的鏈表,即爲最後輸出的那個表 List<int> list=new List<int>(); //定義head指針 ListNode head=listNode; //當輸入的鏈表數據不爲空時,執行進棧操做 while(head!=null) { stack.Push(head.val); head=head.next; } //當棧的長度大於0時,出棧;出棧後的數據添加到名爲list的鏈表 while(stack.Count>0) { int item=stack.Pop(); list.Add(item); } return list; } }
方法二:鏈表+循環
blog
具體的思路:使用兩個鏈表,第一個正序輸入,第二個倒着輸入。遞歸
代碼實現:it
using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } }*/ class Solution { // 返回從尾到頭的列表值序列 public List<int> printListFromTailToHead(ListNode listNode) { //定義一個新鏈表 List<int> list = new List<int>(); //定義節點指向數據 ListNode node = listNode; //輸入的數據不爲空的時候,就一直加 while (node != null) { list.Add(node.val); node = node.next; } //定義第二個鏈表 List<int> re = new List<int>(); //從鏈表1的最後端倒序插入新鏈表 for (int i = list.Count - 1; i > -1; i--) { re.Add(list[i]); } //返回新鏈表 return re; } }
方法三:遞歸io
具體的思路:指針遍歷,若是這個指針的下一位是空的,輸出一個數;不爲空就繼續往下循環。還有一件事啊!就是,你只要用遞歸法,必定要搞好這個循環和終止條件!!不要弄成個死循環。class
代碼實現:
using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } }*/ class Solution { // 返回從尾到頭的列表值序列 public List<int> printListFromTailToHead(ListNode listNode) { // write code here //定義一個新鏈表 List<int> list = new List<int>(); //數據域不空,執行,空了的話,執行返回list if (listNode != null) { //下一個數據域還不空,遞歸!! if (listNode.next != null) { //一開始我沒用list=後面,直接寫了後面的,老實說,我不是很懂爲什麼加上,哎!! list = printListFromTailToHead(listNode.next); } //若是下一個空了,就在這個鏈表上加上他!! list.Add(listNode.val); } //返回鏈表 return list; } }