一道链表算法求指点
#include<stdio.h>
#include<malloc.h>
#define N 41
#define M 5
typedef struct node *link;
struct node{
int item;
link next;
};
link NODE(int item, link next)
{
link t = malloc(sizeof *t);
t->item = item;
t->next = next;
return t;
}
int main(void)
{
int i;
link t = NODE(1, NULL);
t->next = t;
for(i = 2; i <= N; i++)
t = t->next = NODE(i, t->next);
while(t != t->next)
{
for(i = 1; i < M; i++)
t = t->next;
t->next = t->next->next;
}
printf("%d\n", t->item);
return 0;
}
这个链表的算法硬是没看懂啊 求指点
[解决办法]
link NODE(int item, link next) //创建link链表节点
{
link t = malloc(sizeof *t);
t->item = item;
t->next = next;
return t;
}
int main(void)
{
int i;
link t = NODE(1, NULL);
t->next = t; //建立环
for(i = 2; i <= N; i++)
t = t->next = NODE(i, t->next); // 想环插入节点
while(t != t->next) // 判断环是否为空
{
for(i = 1; i < M; i++)
t = t->next;
t->next = t->next->next; // 去除 t->next节点
}
printf("%d\n", t->item);
return 0;
}
测试建环撤环操作,资源有泄漏
[解决办法]
这不是链表,是环的练习,环也称环形链表,属于无头链表。环与链表不一样,没有结束点,当环的链指针指向自身时,环作为单元环可以直接删除,环的插修删与链表有所不同,链表需要记录头指针情况,环不需要,因此从算法上讲,环要比链表简单。