题目描述: 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 要求:空间复杂度 O(1) ,时间复杂度 O(n) 。 例如: alt alt

解题思路: 就是把当前节点的next改成当前节点的上一个节点 因此将上一个节点设为previous 下一个节点设为after 此时after的作用是来保存下一个节点,防止丢失 返回值:因为经历一个循环,pHead就会-1,不是当前值。而在每次循环时,pHead的值都会传给previous,因此返回值为previous

代码示例:

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function ReverseList(pHead)
{
    // write code here
    if(pHead == null || pHead.next == null) {
        return pHead
    }
    let previous = null,
        after = null
    while(pHead) {
        after = pHead.next,
        pHead.next = previous,
        previous = pHead,
        pHead = after
    }
    return previous // 此时previous相当于翻转后返回的新的列表
}
module.exports = {
    ReverseList : ReverseList
};