算法题-链表反转-leecode206

357 阅读1分钟

## 温故知新,搬砖久了来个简单算法换换脑子吧嘻嘻~

该题leecode链接:leetcode-cn.com/problems/re…

解题思路

可以首先考虑两个链表的反转:将n+1节点的next指向n就可以了

`输入:...-> n -> n+1 ->...

输出:...n+1 -> n ->...`

那么反转多个节点,需要双指针遍历链表,重复以上操作即可

解题步骤

1.双指针一前一后遍历链表 2.反转双指针

代码

首先完成遍历:

var reverseList = function(head){

    let p1 = head
    let p2 = null
    while(p1){
        p2 = p1
        p1 = p1.next
    }
}

第二步,将p1指回给p2即可

var reverseList = function(head){
    let p1 = head
    let p2 = null
    while(p1){
        const tmp = p1.next
        p1.next = p2 //将p1.next 指向了p2,那么p1无法往下继续遍历,所以此时需要一个临时变量将p1的值保存下来
        p2 = p1
        p1 = tmp
    }
    return p2 //最后将反转的链表返回
}

时间复杂度和空间复杂度

时间复杂度:O(n) 空间复杂度:O(1)