输入一个链表,从尾到头打印链表每个节点的值。
方法1:如果不允许修改链表结构,可以使用递归法
public void printReverse(ListNode head) {
if (head != null) {//最后一个节点不为空
if (head.next != null) {//最后一个节点之后的节点为空,则不再递归,输出最后一个节点的值,把每次没执行完的代码执行完
printReverse(head.next);
}
System.out.println(head.val);
}
}//printReverse
//4
//3
//2
//1
package com.linkedlist;
/**
* @Author you guess
* @Date 2021/2/18 17:41
* @Version 1.0
* @Desc
*/
public class PrintReversly {
public void printReversly(ListNode head) {
if (head != null) {
if (head.next != null) {
printReversly(head.next);
}
System.out.println(head.val);
}
}
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
ListNode listNode2 = new ListNode(2);
ListNode listNode3 = new ListNode(3);
ListNode listNode4 = new ListNode(4);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
new PrintReversly().printReversly(listNode1);
}
}
//输出:
//4
//3
//2
//1
方法2:如果不允许修改链表结构,可以使用栈,后进先出
方法3:如果允许修改链表结构,先反转链表再输出
方法4:
思路:入参是头指针,先从头到尾遍历一遍,把值保存在list中,然后把list的元素头尾交换,最后返回该list即是从尾到头打印出的值.
import java.util.ArrayList;
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Main {
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
ListNode listNode2 = new ListNode(2);
ListNode listNode3 = new ListNode(3);
ListNode listNode4 = new ListNode(4);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
ArrayList<Integer> listValue = new Main().printListFromTailToHead(listNode1);
System.out.println(listValue.toString());
}
/**
* 方法体
* @param listNode 链表头指针
* @return
*/
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> listValue = new ArrayList<Integer>();
while (listNode != null) {
listValue.add(listNode.val);
listNode = listNode.next;
}
int size = listValue.size(), temp;
for (int i = 0; i <= size / 2 - 1; i++) {
temp = listValue.get(i);
listValue.set(i, listValue.get(size - 1 - i));
listValue.set(size - 1 - i, temp);
}
return listValue;
}
}
/*输出:
[4, 3, 2, 1]*/