| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- * @Author: your name
- * @Date: 2021-06-20 17:11:37
- * @LastEditTime: 2021-06-20 19:21:51
- * @LastEditors: Please set LastEditors
- * @Description: In User Settings Edit
- * @FilePath: \slist\slist.c
- */
- #include "loop_list.h"
- #include "stdlib.h"
- #include "stdio.h"
-
-
- pkt_node_t pkt_creat_joseph(void)
- {
- pkt_node_t p, r, h;
-
- p = (pkt_node_t)malloc(sizeof(struct pkt_node));
- p->next = p;
- p->data = 1;
- h = p;
- int n, i;
- loop:
- printf("input a number:");
- scanf("%d", &n);
-
- if (n < 0)
- {
- printf("input error < 0\n");
- goto loop;
- }
- r = h;
- for (i = 2; i <= n; i++)
- {
- p = (pkt_node_t)malloc(sizeof(struct pkt_node));
- p->data = i;
- r->next = p;
- r = p; /* r ponit list tail */
- }
- p->next = h; /* tail node ponit head node */
- return h;
- }
-
- int pkt_show_list(pkt_node_t l)
- {
- pkt_node_t p = l;
- int i = 0;
- while (p->next != l)
- {
- printf("l[%d] = %d\n", i, p->data);
- p = p->next;
- i++;
- }
- printf("l[%d] = %d\n", i, p->data);
-
- return 0;
- }
-
- int pkt_joseph(pkt_node_t l, int k, int m)
- {
- PKT_ASSERT(l);
- pkt_node_t p = l;
- while (p->next->data != k)
- {
- p = p->next; /* find k node prev node*/
- }
- printf("l[k] = %d\n", p->next->data);
-
- pkt_node_t r = p;
- pkt_node_t q;
- int i;
- while (r->next != r)
- {
- for (i = 0; i < m - 1; i++) /* find next del node prev node */
- {
- r = r->next;
- }
- q = r->next; /* save delete node to q */
- r->next = q->next;
- printf("del = %d\n", q->data);
- free(q);
- }
-
- printf("del = %d\n", r->data); /* last node */
- free(r);
- return 0;
- }
-
- int main(int argc, char **argv)
- {
- pkt_node_t list;
-
- list = pkt_creat_joseph();
- pkt_show_list(list);
-
- pkt_joseph(list, 3, 4);
-
- return 0;
- }
|