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;
}

 

posted @ 2013-03-27 08:10  cart55free99  阅读(189)  评论(0编辑  收藏  举报