3.从尾到头打印链表
思路1:
原地反转链表之后进行顺序遍历,反转链表详解请看之前我的博客一次遍历反转链表
代码实现:
import java.util.ArrayList;
//反转链表之后进行顺序遍历
public class Solution3 {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null) return new ArrayList<>();
//1、反转链表
ListNode dummy = new ListNode(-1);
dummy.next = listNode;
while (listNode.next != null) {
ListNode temp = listNode.next;
listNode.next = listNode.next.next;
temp.next = dummy.next;
dummy.next = temp;
}
//2.顺序遍历反转之后的链表
ArrayList<Integer> list = new ArrayList<>();
ListNode node = dummy.next;
while (node != null) {
list.add(node.val);
node = node.next;
}
return list;
}
}
思路2:
逆序遍历可以采用栈的思想来解决。
ArrayList 中 add(index,value) 方法,可以指定 index 位置插入 value 值,通过把数据不断插入0下标位置,来实现链表的逆序遍历。
代码实现:
import java.util.ArrayList;
//使用add(index,value)方法实现链表的逆序遍历
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ListNode temp = listNode;
while(temp!=null){
list.add(0,tmp.val);
temp = temp.next;
}
return list;
}
}