206.反转链表

82 阅读1分钟

思路

反转俩个节点: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):没有数组