题目
给你单链表的头节点
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; };
坚持努力,无惧未来!