## 温故知新,搬砖久了来个简单算法换换脑子吧嘻嘻~
该题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