题目
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
思路
- 最后要求返回一个链表反转的数组
- 第一次遍历想到用虚拟节点
- 可以考虑先遍历链表然后得到链表的长度
- 然后链表从头开始遍历,数组从末尾开始复制
- 完成一个反转
详细代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
//count用来计数
int count = 0;
ListNode dummy = head;
//当节点不为空时,count++
while(dummy!=null){
dummy =dummy.next;
count++;
}
//因为最后要返回数组,所以新建数组并设置数组长度即链表长度
int[] arr = new int[count];
//数组从最后到0,刚好链表从开始到结尾刚好完成一个反转
for(int i = count-1;i>=0;i--){
arr[i] = head.val;
head = head.next;
}
return arr;
}
}