题目描述: 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 要求:空间复杂度 O(1) ,时间复杂度 O(n) 。 例如:
解题思路: 就是把当前节点的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
};