题目描述
原题链接
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 
输出:[2,1]
示例 3:
输入:head = [] 
输出:[]
提示:
- 链表中节点的数目范围是 [0, 5000]
 - -5000 <= Node.val <= 5000
 
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
个人解法
Javascript
递归
/** @lc app=leetcode.cn id=206 lang=javascript** [206] 反转链表*/// @lc code=start/*** 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 (head === null || head.next === null) {return head;}if (head.next.next === null) {let res = head.next;head.next.next = head;head.next = null;return res;} else {let res = reverseList(head.next);head.next.next = head;head.next = null;return res;}};// @lc code=end
数组存储辅助
/** @lc app=leetcode.cn id=206 lang=javascript** [206] 反转链表*/// @lc code=start/*** 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 (head === null || head.next === null) {return head;}let nodeArr = [];let temp = head;while (temp) {nodeArr.push(temp);temp = temp.next;}let length = nodeArr.length;for (let i = length - 1; i >= 1; i--) {nodeArr[i].next = nodeArr[i - 1];}nodeArr[0].next = null;return nodeArr[length - 1];};// @lc code=end
