题目
思路
见代码内
代码1,迭代
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let pre = null;
let cur = head;
while(cur != null){
let tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
};
代码2递归
递归并不是一个优化的解法,空间复杂度会更高
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
function back(pre, cur){
if (!cur) return pre; //返回链表的头节点,之后返回的也都是这个头节点
let newHead = back(cur, cur.next);
cur.next = pre; //对于每一层递归来说,cur和pre都在指代不同的节点
return newHead;
}
return back(null, head);
//这里传进来null,是因为曾经的head会变成最后一个,要指向null
};