单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列

单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列

题目:

有一个单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列,根据出列的先后顺序重新组成单向循环链表。

函数原型: void reorder(Node **head , int m) ;


编程实现:

#include
#include

typedef struct node
{
  int data;
  struct node *next;
}node,*listqueue;

void createlist(listqueue &L,int num)
{
  L=(listqueue)malloc(sizeof(listqueue));
  L->data=1;
  L->next=L;
  listqueue p,q=L;
  for(int i=2;i<=num;i++)
  {
    p=(listqueue)malloc(sizeof(listqueue));
	p->data=i;
	p->next=L;
	q->next=p;
	q=p;
  }
}

void reorder(node **head,int m)
{
  listqueue pPrev,pCurr;
  pPrev=pCurr=*head;
  int i=1;
  while(pCurr!=NULL)
  {
    if(i==m)
	{
	  printf("%3d",pCurr->data);
	  pPrev->next=pCurr->next;
	  pCurr=pPrev->next;
	  i=1;
	}
	pPrev=pCurr;
	pCurr=pPrev->next;
	i++;
	if(pPrev==pCurr)
	{
	  printf("%4d\n",pCurr->data);
	  break;
	}
  }
}

void main()
{
   listqueue head;
   createlist(head,10);//创建数据从1到10的循环链表,head->data=1;
   reorder(&head,3);
}



你可能感兴趣的:(笔试面试专题)