解题思路
- 反转两个节点:将n+1的next指向n
- 反转多个节点:双指针遍历链表,重复上述操作
解题步骤
- 双指针一前一后遍历链表
- 反转双指针
代码演示
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let p1 = head;
let p2 = null;
while(p1) {
const tmp = p1.next;
p1.next = p2;
p2 = p1;
p1 = tmp;
}
return p2
};
- 时间复杂度:由于存在一个循环,因此时间复杂度为O(n)
- 空间复杂度:由于这个算法里没有任何数组或矩阵,因此空间复杂度为O(1)
最后
本文是自己最近听完慕课lewis老师的JavaScript版数据结构与算法课程的总结,感觉掌握了反转链表的方法之后,对解决链表其他题目很有帮助!希望本文能帮助到前端打工人学习算法啦!