- #include <stdio.h>
- #include <stdlib.h>
- typedef int datatype;
- typedef struct node
- {
- datatype data;
- struct node *next;
- }listnode, *linklist;
- //定义一个节点,实际上就是一个结构体
- //里面包含了一个int 类型的data和一个指向该结构体类型的指针
- linklist linklist_create(int n)//这个函数的功能是创建一个链表,参数int 是需要创建节点的个数
- {
- int i;
- linklist H, p, q; 定义了三个节点指针
- H = (linklist)malloc(sizeof(listnode));//分配节点内存并且把地址赋给H指针,也就是头节点
- if (H == NULL)
- {
- printf("malloc error\n");
- return H;
- }
- H->data = 1;//结构体赋值
- H->next = H;//将下一个指针指向自己
- p = H;//当前指针也指向自己
- i = 2;
- while (i <= n)//这个循环就重复创建节点,并且把节点插入到当前链表中
- {
- q = (linklist)malloc(sizeof(listnode));
- if (q == NULL)
- {
- printf("malloc error\n");
- return q;
- }
- q->data = i;
- p->next = q;
- q->next = H;
- p = q;
- i++;
- }
- return H;
- }
- void linklist_show(linklist H)//遍历整个链表,并且打印出来data的值
- {
- linklist p = H;
- while (p->next != H)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("%d\n", p->data);
- }
- int jose(linklist H, int k, int m)//这个不知道是在做什么,大神指点!
- {
- int i = 0;
- linklist p = H, q;
- while (i < k-1)
- {
- p = p->next;
- i++;
- }
- printf("%d\n", p->data);
- while (p->next != p)
- {
- i = 0;
- while (i < m-2)
- {
- p = p->next;
- i++;
- }
- q = p->next;
- p->next = q->next;
- printf("%d ", q->data);
- free(q);
- q = NULL;
- p = p->next;
- }
- printf("%d\n", p->data);
- }
- PS:另外jose这个函数最后少了一个return 0;
- int main()
- {
- linklist H;
- H = linklist_create(8);
- linklist_show(H);
- jose(H, 3, 4);
- return 0;
- }
复制代码 |