通过循环列表循环Java
问题描述:
我想要创建一个循环链接列表的方法,本质上模仿令牌环网络。我创建一个0或1的随机数,如果它是0,它将删除列表中的第一个项目。如果它是一个,它只是说他们仍然登录。通过循环列表循环Java
所以我应该有这样的事情..上 用户B注销 用户A注销
当列表是明确表示终止
问题是,它似乎
登录的用户总是让一个特定的用户......我怎样才能做到这一点?
public void log(){
if(start==null)
System.out.println("List is empty..");
else{
Node temp=start;
System.out.print("->");
//get rid of each user with a similar method but with a random user removed....
while(temp.next!=null && count>0)
{
int r = rand.nextInt(2);
if(r==0)
{
deleteAt(0);
System.out.println(" OFF"+temp.data);
}
else if(r==1)
{
System.out.println(" ON "+temp.data);
}
temp=temp.next;
}
//System.out.println(counter);
}
}
public void deleteFirst() {
Node temp=start;
while(temp.next!=start){
temp=temp.next;
}
temp.next=start.next;
start=start.next;
count--;
}
public void deleteAt(int position){
Node current=start;
Node previous=start;
for(int i=0;i<position;i++){
if(current.next==start)
break;
previous=current;
current=current.next;
}
if(position==0)
deleteFirst();
else
previous.next=current.next;
count--;
}
答
从循环链表中删除最后一个元素是一种特殊情况,因为您需要将start设置为null。所以你需要在你的删除例程中满足这个要求:测试start->next == start
。
除此之外,在删除元素时循环遍历列表需要特别注意:log()中外部循环中的temp可以指向已删除的元素,而不是列表中的元素。以temp=temp->next
然后可能无效。
另外,count在deleteAt(0)中递减两次。
可能应该验证是否还有一个项目,因为temp = temp.next引用本身让我头疼它的思考。 – 2014-10-17 21:01:23
那不仅仅是将温度设定为临时温度?不是很好的做法,但不会影响程序,我错了吗? – user3020002 2014-10-17 21:04:15
你的'deleteAt()'方法如何重新赋值'next'?特别是,当你回到一个项目列表,它是否使'lastItem.next = lastItem'? – azurefrog 2014-10-17 21:07:28