读书人

一道链表算法求指点解决思路

发布时间: 2012-04-04 16:38:51 作者: rapoo

一道链表算法求指点
#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;   
}

测试建环撤环操作,资源有泄漏
[解决办法]
这不是链表,是环的练习,环也称环形链表,属于无头链表。环与链表不一样,没有结束点,当环的链指针指向自身时,环作为单元环可以直接删除,环的插修删与链表有所不同,链表需要记录头指针情况,环不需要,因此从算法上讲,环要比链表简单。

读书人网 >C语言

热点推荐