C 约瑟夫环 链表
#include <stdio.h> #include <string.h> #include <stdlib.h> //stdlib.h 包括了malloc.h #define N 17 typedef struct Node{ int data; struct Node * next; }Node; Node * add21Node(Node * first); Node * delNode(Node * start); int main(){ Node *first=(Node *)malloc(sizeof(Node)); first->data=1; first->next=NULL; Node *last=add21Node(first); last->next=first; int i=0; //ok /* Node *p=first; while(i<100){ i++; printf("%d",p->data); p=p->next; }*/ Node *p=first; while(i<9){ p=delNode(p); i++; } for(i=0;i<N-8;i++){ printf("%d,",p->data); p=p->next; } } Node * add21Node(Node * first){ Node *p=first; int i=1; while(i<=21){ i++;//while循环千万不要忘记i++ Node * newNode=(Node *)malloc(sizeof(Node)); newNode->data=i; newNode->next=NULL; p->next=newNode; p=newNode; } return p; } /** 删除指定位置的节点 返回下一个节点 */ Node * delNode(Node * start){ Node *p=start; int i=1; while(i<N-1){ i++; p=p->next; }//来到了要删除节点的前一个节点 Node *del=p->next; printf("\n-%d--\n",del->data); //free(del); p->next=p->next->next; free(del);//free语句不能放在上面那句话前面 return p->next->next; }