image.png

    1. // 206. 反转链表
    2. // 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
    3. // 输入:head = [1,2,3,4,5]
    4. // 输出:[5,4,3,2,1]
    5. /**
    6. * Definition for singly-linked list.
    7. * function ListNode(val, next) {
    8. * this.val = (val===undefined ? 0 : val)
    9. * this.next = (next===undefined ? null : next)
    10. * }
    11. */
    12. /**
    13. * @param {ListNode} head
    14. * @return {ListNode}
    15. */
    16. // 题解
    17. // 1. n个链表翻转可以拆分成两个链表反转,可以使用快慢指针
    18. // 2. 即b链表的next 指向a链表
    19. // 3.定义临时值来保存p1,即满足交换律
    20. var reverseList = function (head) {
    21. // 定义快慢指针
    22. let p1 = head;
    23. let p2 = null; // 从null开始
    24. // 循环遍历
    25. while (p1) {
    26. // 定义临时变量
    27. let temp = p1.next;
    28. p1.next = p2;
    29. // 把前一个赋值给后一个
    30. p2 = p1
    31. // p1继续往下走
    32. p1 = temp
    33. }
    34. return p2
    35. };