题目

题解

1.简单双指针
每次反转两个指针,然后prev和curr分别向后移一位,再反转
注意记录curr.next

  1. var reverseList = function (head) {
  2. let curr = head, prev = null
  3. while (curr) {
  4. const t = curr.next
  5. curr.next = prev
  6. prev = curr
  7. curr = t
  8. }
  9. return prev
  10. };

2.递归
可以将递归看作是栈
根据先进后出原则,将当前节点的下一个节点送入递归,可认为返回的是反转好的节点,
只要反转当前节点,将当前节点的下一个节点指向当前节点,当前节点的下一个节点置为NULL即可

  1. var reverseList = function (head) {
  2. if (!head || !head.next) {
  3. return head
  4. }
  5. const node = reverseList(head.next)
  6. head.next.next = head
  7. head.next = null
  8. return node
  9. };