题目
https://leetcode-cn.com/problems/reverse-linked-list/
思路
- 递归:大问题拆成两个小问题,小问题和大问题有同样的解题步骤,存在最小子问题,本题中,在最小子问题就是只有一个节点的时候,也就是假如1->null就不必翻转,return 1出来即可,然后假设之前的连接为2->1->null,那么首先2->1->2,然后断开2->1,也就是2->1转化为2->null,所以就是成为1->2->null
- 迭代,pre保存cur->next,也就是cur->next = pre;cur->next要被修改,所以设置一个值nextNode保存cur->next
code
/**
* 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 || !head.next){
// return head;
// }
// let node;
// node = reverseList(head.next);
// head.next.next = head;
// head.next = null;
// return node;
// 迭代
let pre = null;
let cur = head
while (cur){
let nextNode = cur.next;
cur.next = pre;
pre = cur;
cur = nextNode;
}
return pre;
};