算法题-链表反转-leecode206

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

该题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)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享