剑指offer--算法题--04--从尾到头打印单链表

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

输入:

每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于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;
	}
}

猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80275978