思路
反转俩个节点:n+1的指针指向n 反转多个节点:双指针遍历链表,重复上述操作 双指针:一个指针指向1,另一个指向2,第二次指向1的指针指向2,指向2的指针指向3。
代码
var reverseList = function(head) {
//双指针p1,p2
//假设 p1指向1,p2指向2,那么p2指向p1,那p1指向null,不可能全部指向null
//由此,p2为null,p1为1
let p1 = head;
let p2 = null;
//因为双指针的缘故,所以p1可以遍历到最后
while(p1){
let n = p1.next
//p1指向p2,之后俩指针向后移1为,p1 = 2,p2 = 1
p1.next = p2
p2 = p1
p1 = n
}
//因为循环的缘故p1为null,p2位底部元素
return p2
};
复杂度
时间O(n):只有一个while循环 空间O(1):没有数组