HTML基础——单项链表

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));


    

猜你喜欢

转载自blog.csdn.net/kingmipple/article/details/80156793