1、定义
function Node(n,next){ this.n=n; this.next=next; }
n是当前节点的值,next是连接的下一个节点
2、构建链表
//构建一个链表 var linked=new Node(-1,null); //让一个p和linked指向同一个对象 var p=linked; //给链表增加内容 for (var i=1;i<7;i++) { p.n=i; p.next=new Node(-1,null); p=p.next; } p.n=7;
3、如何判断链表是否有环
1、先给链表加上环
p.next=linked.next.next;
2、假设两个节点同时从linked出发,但是速度不一样,如果最后相遇则说明有环
p=linked; var q=linked; do{ if(p==null||q==null||q.next==null){ break; } p=p.next; q=q.next.next; }while(!(p===q)); if(p===q){ //有环 document.write("有环"+"相遇点是:"+p.n); }else{ //无环 document.write("无环"); }
4、如果有环,环的大小是多少
两个节点再次开始从相遇点运动,再次相遇时慢的刚好运动了一圈
var size=0; do{ p=p.next; size++; q=q.next.next; }while(!(p===q)); document.write("<br>环的大小是:"+size);
5、环的切入点
一个节点从开始点出发,一个从相遇点出发,速度一样,则相遇点就是切入点
p=linked; var temp=0; for (;!(p===q);) { temp++; p=p.next; q=q.next; } document.write("<br>切入点是:"+p.n);
6、链表的总大小是多少
document.write("<br>链表的总大小是:"+(size+temp));