剑指 Offer 06. 从尾到头打印链表
来源:力扣(LeetCode)
https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/
著作权归领扣网络所有。
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:利用递归的特性
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $head
* @return Integer[]
*/
function reversePrint($head) {
$res = [];
$this->dfs($head, $res);
return $res;
}
function dfs($head, &$res) {
if ($head) {
$next = $head->next;
$head->next = null;
$this->dfs($next, $res);
$res[] = $head->val;
}
}
}
方法2:利用栈的特性
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $head
* @return Integer[]
*/
function reversePrint($head) {
$res = [];
while($head) {
array_unshift($res, $head->val);
$head = $head->next;
}
return $res;
}
}