注册 登录
编程论坛 C++教室

单循环链表问题

zcdjt 发布于 2015-04-15 22:08, 523 次点击
//有50人围成一圈,每数到5时出列,问每次出列人的编号 ?
//我用的是单循环链表,可出不来结果,求大神指点。
#include<iostream>
using namespace std;
struct list
{
  int data;
  list *link;
};
void List(int n)
{
  list *first,*p,*p1,*p2;
  for(int i=1;i<=50;i++)
  {
    p=new list;
    p->data=i;
    if(i==1)
    {
     first->link=p;
    }
    else
    {
      p->link=first->link;
      first->link=p;
    }
  }
    p->link=first;
    p1=first;
    for(int i=0;i<n;i++)
    {
      int s=1;
      while(s<5)
      {
        p2=p1;
        p1=p1->link;
        s++;
      }
      p=p1;
      cout<<"出队列的数字是:"<<p->data<<endl;
      p2->link=p1->link;
      p1=p1->link;
      delete p;
    }
}
int main()
{
    List(50);
    system("pause");
    return 0;
}
6 回复
#2
诸葛欧阳2015-04-15 22:48
看看下面的一个帖子
#3
zcdjt2015-04-16 14:56
回复 2楼 诸葛欧阳
能指出我的错误之处吗?有点想不通,请指教啦。
#4
诸葛欧阳2015-04-16 19:18
你在构建链表的时候没有固定住头指针
#5
zcdjt2015-04-16 22:11
回复 4楼 诸葛欧阳
能具体说下吗?谢了!
#6
yangfrancis2015-04-17 00:06
看list函数
for(int i=1;i<=50;i++)
  {
    p=new list;
    p->data=i;
    if(i==1)
    {
     first->link=p;//这里是不是应该first=p?且这步之前还需要一个first=new list;
    }
    else
    {
      p->link=first->link;//可能这步有问题,这是什么逻辑?
      first->link=p;
    }
  }
#7
zcdjt2015-04-17 12:58
回复 6楼 yangfrancis
我用的是带一个表头的单链表,在表头后面添加数据直到结束,你所说的我试了不行。不过谢了。
1