前端实习求职算法题-DayOne

65 阅读1分钟

题目

剑指 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;