首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-04 
一道链表算法求指点#includestdio.h   #includemalloc.h   #define N 41   #define M 5   typedef str

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

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

热点排行