1.反转链表
思路:用_next记录下一个节点,pre记录当前一个节点,然后把当前节点的next指向上一个pre
function ReverseList(pHead)
{
let pre = null;
let _next = null;
while(pHead){
_next = pHead.next;
pHead.next=pre;
pre = pHead;
pHead = _next;
}
return pre;
}
module.exports = {
ReverseList : ReverseList
};
2.判断链表是否有环 思路:快慢指针:快指针pf每次移动2个节点,慢指针ps每次移动1个节点,如果快指针能够追上慢指针,那就说明其中有一个环,否则不存在环。这个方法的时间复杂度为O(n),空间复杂度为O(1),实际使用两个指针。
function hasCycle( head ) {
let pf = head
let ps = head
if( !(head && head.next && head.next.next) )
return false
while(pf && pf.next)
{
pf = pf.next.next
ps = ps.next
if(pf === ps)
return true
}
return false
}
module.exports = {
hasCycle : hasCycle
};