题目
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {number[]}
*/
var reversePrint = function (head) {}
首先,最容易理解的是他要求返回一个数组,那么我们只需要将每个节点值插入数组里面,得到数组化的链表,那么我们就用双指针或者内置函数调转就好了,不难
先定义
let res=[];
let cur=head;
然后我们将节点值插入数组里面
let i=0;
while(cur!==null){
res[i]=cur.val;
cur=cur.next;
i++;
}
得到数组res,我们对res进行反转
let left=0,right=res.length-1;
//首尾调换,中间不动
while(left<right){
let temp=res[left];
res[left]=res[right];
res[right]=temp;
left++;
right--;
}
return res;
综合起来就是
/**
* @param {ListNode} head
* @return {number[]}
*/
var reversePrint = function (head) {
let res=[];
let cur=head;
let i=0;
while(cur!==null){
res[i]=cur.val;
cur=cur.next;
i++;
}
let left=0,right=res.length-1;
while(left<right){
let temp=res[left];
res[left]=res[right];
res[right]=temp;
left++;
right--;
}
return res;
};
到了这一步,我们了解了基本得思路,简单明了很多,那我们可以使用JavaScript得内置函数了
/**
* @param {ListNode} head
* @return {number[]}
*/
var reversePrint = function (head) {
let res=[];
let cur=head;
while(cur!==null){
res.unshift(cur.val);
cur=cur.next;
}
return res;