题目
- 剑指offer06: 从尾到头打印链表,以数组的形式输出
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
题解
法1 – Java实现
- 1.定义一个函数获取到链表的长度
- 2.定义一个数组反向存储链表中的元素,然后输出数组
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
// 计算链表的长度,然后进行反向存储
int len = getLength(head);
int[] arr = new int[len];
int i = 0;
ListNode p = head;
while(p != null){
arr[len - 1 - i] = p.val;
p = p.next;
i++;
}
return arr; // 返回数组时,直接打印数组的名字即可!
}
public int getLength(ListNode head){
int len = 0;
ListNode p = head;
while(p != null){
len++;
p = p.next;
}
return len;
}
}
法2 – python实现
- 遍历链表的同时将值存在数组中,然后反向输出数组(python可以直接反向输出数组中的元素)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
arr = []
while head:
arr.append(head.val)
head = head.next
return arr[::-1]