創(chuàng)新互聯(lián)建站是網(wǎng)站建設(shè)專(zhuān)家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),專(zhuān)業(yè)領(lǐng)域包括網(wǎng)站制作、成都網(wǎng)站建設(shè)、電商網(wǎng)站制作開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶(hù)提供全方位的互聯(lián)網(wǎng)品牌整合方案!
這里建議使用循環(huán)單鏈表
#include
#include
typedef struct node{
int data;
struct node *next;
}Node;
void ysflb(int n,int k){//總共n,k出去
//創(chuàng)建鏈表
Node *head = NULL,*p = NULL,*r = NULL,*next = NULL;
head = (Node *)malloc(sizeof(Node)); //開(kāi)空間
if(head == NULL){ //判斷head是否創(chuàng)建成功,一般都成功
printf("Failed");
return;
}
head->data = 1;
head->next = NULL; //這是第一個(gè)節(jié)點(diǎn)
p = head;//p和head是同一個(gè)節(jié)點(diǎn)(指向)
//循環(huán),尾插
for(int i = 2;i <= n; i++){
r = (Node *)malloc(sizeof(Node));
r->data = i;
r->next = NULL;
p->next = r;//p的next指向r,即將r連接再p的后面,一二節(jié)點(diǎn)連接完成。
p = r;//將p向后移動(dòng)一位,從第一個(gè)節(jié)點(diǎn)到了第二個(gè)節(jié)點(diǎn)
}
p->next = head; //讓p的next指回去第一個(gè)節(jié)點(diǎn)
p = head; //p再指向第一個(gè)節(jié)點(diǎn)
//循環(huán)鏈表創(chuàng)建完成
while(p->next != p){//判斷是否只剩一個(gè)元素
for(int i = 1;i < k;i++){
r = p; //r就是p的前一個(gè)節(jié)點(diǎn),一會(huì)p會(huì)向后移動(dòng)
p = p->next;//p向后移動(dòng)一位,p就是要出去的節(jié)點(diǎn)
}
printf("%d\t",p->data);
//刪除p
//越過(guò)當(dāng)前節(jié)點(diǎn),將前一個(gè)節(jié)點(diǎn)于當(dāng)前節(jié)點(diǎn)的后一個(gè)相連
r->next = p->next;//前一個(gè)節(jié)點(diǎn)的next指向后一個(gè)節(jié)點(diǎn)的next
p = p->next;//p向移一個(gè)節(jié)點(diǎn)(p成為當(dāng)前節(jié)點(diǎn)的后一個(gè)節(jié)點(diǎn))
}
printf("最后剩余:");
printf("%d",p->data);
}
int main(){
ysflb(10,3);
return 0;
}