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

 

转载于:https://www.cnblogs.com/cart55free99/archive/2013/03/27/2983860.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值