题目要求:序号为1、2、3、4、.......、N的老鼠站在一圈,一只猫从序号1的老鼠开始吃起,每隔一只再吃一只,直到吃完,打印出老鼠被吃的顺序.
用循环单链表实现的,算法很简单,每个结点表示一个老鼠,循环从第一个结点开始隔次删除结点,直到链表为空。
代码如下:
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
} LSNode; //链表结构
void main()
{
LSNode *head,*curr,*pre,*q;
int i, iMouseNumber;
head = (LSNode *)malloc(sizeof(LSNode));
head->next = head; /* 建立循环单链表*/
curr = head->next; /* curr指向第一个结点 */
pre = head; /* pre指向头结点*/
printf("%s","请输入老鼠的个数/n");
scanf("%d",&iMouseNumber);
for(i=0; i<iMouseNumber; i++) /* 建立老鼠的链表 */
{
pre = curr;
q = (LSNode *)malloc(sizeof(LSNode));
q->data = i+1; //插入
q->next = pre->next;
pre->next = q;