前端算法-翻转链表

90 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

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

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

题解

反转链表其实就是将链表中的数据进行换位的一个过程,我们这里进去先判断一下当前出参head是否是一个链表或出参head的长度是否小于等于零,如果满足这两个条件中的任何其中一项,则直接把出参head返回出去,如果都不满足我们则往下继续执行,由于我们涉及到了换位,所以我们这里需要使用到两个变量,我们声明一个prve变量让他代表尾部,在声明一个curr变量让他代表头部,我们先将出参head赋值给curr变量,然后使用循环对其做一个换位操作,循环的判断条件是,如果当前的curr变量转换成布尔值为true的话则进行循环,进入循环后我们进行换位操作,先在循环内部声明一个next常量,我们将每次循环的头部下一个进行存储到这里,以便于后面进行换位,我们将prve变量赋值给curr.next,然后再把curr变量赋值给prve变量,在将存储头部下一个数据的next变量赋值给curr变量,即可完成数据反转的操作,循环完后,我们在将存储反转数据的变量给返回出去即可

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
if(!Array.isArray(head)||head.length<=0){
    return head;
}
let prve = null;
let curr = head;
while(curr){
const next = curr.next;
curr.next = prve;
prve = curr;
curr = next;
}
return prve;
};

坚持努力,无惧未来!