原题链接:剑指Offer06:从尾到头打印链表
先反转链表,再存到数组返回
时间复杂度O(n)
,空间复杂度O(n)
Golang
package main
type ListNode struct {
Val int
Next *ListNode
}
func reverseLink(head *ListNode) *ListNode {
if head == nil {
return nil
}
var pre, next *ListNode
cur := head
for cur != nil {
next = cur.Next
cur.Next = pre
pre = cur
cur = next
}
return pre
}
func reversePrint(head *ListNode) []int {
var arr []int
cur := reverseLink(head)
for cur != nil {
arr = append(arr, cur.Val)
cur = cur.Next
}
return arr
}
Python
from typing import List
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
stack = []
p = head
while p:
stack.append(p.val)
p = p.next
return stack[::-1]
C#
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}
public class Solution
{
public int[] ReversePrint(ListNode head)
{
List<int> stack = new List<int>();
ListNode p = head;
while(p != null) {
stack.Add(p.val);
p = p.next;
}
stack.Reverse();
return stack.ToArray();
}
}