以下是引用有容就大在2012-1-17 23:17:03的发言:
我写个循环链表的,看看有什么缺陷,我链表不怎么会用。
上代码:#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct nodelist)
typedef struct nodelist
{
int num;
struct nodelist *next;
}LIST;
int main(void)
{
LIST *head, *end, *p1, *p2;
int n, i, m = 0, k = 0, j = 1;
head = NULL;
printf("Please input n:");
scanf("%d", &n);
printf("\n");
p1 = p2 = (LIST *)malloc(LEN);
head = p1;
for (i = 1; i < n; i++)
{
p1 = (LIST *)malloc(LEN);
p2 -> next = p1;
p2 = p2 -> next;
}
end = p2;
end -> next = head;
p1 = head; i = 1;
do {
p1 -> num = i;
i++;
p1 = p1 -> next;
}while (p1 != head);
p1 = head;
p2 = end;
while (m < n -1)
{
k++;
if (k % 7 == 0 || k % 10 == 7)
{
printf("%-3d--> ", p1 -> num);
if (j++ % 7 == 0)
{
printf("\n");
}
m++;
p2 -> next = p1 -> next;
p1 = p1 -> next;
}
else
{
p2 = p1;
p1 = p1 -> next;
}
}
printf("\n The last number is %d\n\n", p1 -> num);
printf("Yell %d times.\n\n", k);
free(p1);
return 0;
}
我有个问题:malloc后要手动free我那个free(p1);能达到目的吗?对这个很纠结,弄不懂怎么放, 究竟是放指针还是放内存?
free() 函数名: free 功 能: 与malloc()函数配对使用,释放malloc函数申请的动态内存。(另:如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。) 用 法: void free(void *ptr);
free(内存地址(空类型指针));
free(p1);是p1指向的内存地址 并不是释放指针.
你要释放指针的话free(&p1); 这样才可以。。
那么free 对p连续操作两次就会导致程序运行错误
你就可以做测试快乐。
链表不会用的话 还是要真的明白 链表的本质。就随便你怎么写 链表了。。。