Skip to main content

6 反转链表

牛客

描述

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

示例1

输入: {1,2,3}

返回值: [3,2,1]

示例2

输入: {67,0,24,58}

返回值: [58,24,0,67]


这题书上是打印链表,被牛客网改为返回List了。。。如果是打印链表:如果允许修改原链表,可以先将其反转,再打印,如果不允许修改,可以用一个栈,把节点一个一个 push 进去,再一个一个 pop 出来。

import java.util.Deque;
import java.util.LinkedList;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode t=listNode;
ArrayList<Integer> list=new ArrayList<>();
Deque<Integer> stack=new LinkedList<>();
while(t!=null){
stack.push(t.val);
t=t.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
}

也可以直接顺序添加到 ArrayList ,再 reverse

import java.util.Collections;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode t=listNode;
ArrayList<Integer> list=new ArrayList<>();
while(t!=null){
list.add(t.val);
t=t.next;
}
Collections.reverse(list);

return list;
}
}