剑指 Offer 06. 从尾到头打印链表

768人浏览 / 0人评论

题目

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

示例 1:

输入:head = [1,3,2]
输出:[2,3,1]

题解

思路一(辅助栈)

根据栈的特点,遍历链表,将节点的值依次入栈;再将栈中元素,依次出栈

.png

思路二(递归)

先走至链表末端,回溯时依次将节点值加入列表;链表末端时,返回空列表

.png

代码

辅助栈

func reversePrint(head *ListNode) []int {
	stack := make([]int, 0)
	// 入栈
	for head != nil {
		stack = append(stack, head.Val)
		head = head.Next
	}

	ret := make([]int, len(stack))
	// 出栈
	for i := 0; i < len(stack); i++ {
		ret[i] = stack[len(stack)-i-1]
	}
	return ret
}

递归

func reversePrint(head *ListNode) []int {
	// 递归结束
	if head == nil {
		return []int{}
	}
	// 回溯
	return append(reversePrint(head.Next), head.Val)
}

全部评论