- 题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
- 输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
- 输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
- 样例输入:
-
1 2 3 4 5 -1
- 样例输出:
-
5 4 3 2 1
这里采用递归打印的方法。
package jzoffer; import java.util.Scanner; public class ListTest { public static void main(String[] args) { boolean status = true; Scanner sc = new Scanner(System.in); ListNoder head = null; //创建一个头结点这样方便遍历 ListNoder temp = null; //每次用临时节点代替头结点指向去遍历遮掩很方便的 while(sc.hasNextInt()){ int m = sc.nextInt(); if(m == -1){ break; //这里是我们在控制台的结束标记,输入-1即代表我们输入结束 } ListNoder LSM = new ListNoder(m);//这里初始化一个节点,增加节点 if(head == null){ //先判断我们的头节点是否null,如果为空的话,我们将上面初始化的一个节点给他 head = LSM; status = false; //status的作用在这里 }else{ status = true; } if(status){ temp = head; while(temp.next != null){ temp = temp.next;//如果temp指向的下一个为不为null的话,那我们就让他继续往下指,直到找到一个为null的将初始化的节点赋值给temp } temp.next = LSM; } } print_list(head); //调用递归方法倒叙输出 } public static void addList(int m){ } public static void print_list(ListNoder listNoder ){ if(listNoder != null){ if(listNoder.next != null){ print_list(listNoder.next); } System.out.println(listNoder.data); } } } class ListNoder{ int data; ListNoder next = null; public ListNoder(int k){ data = k; } }