- 论坛徽章:
- 0
|
以前用数组写过约瑟夫环的问题,刚刚学了链表,就尝试用它来解决。
我建立了一个循环链表,节点内存储1-N共N个节点。
然后尝试按k步输出出列的顺序,却在运行时出现问题。
已经确认建立的链表没有问题,程序在执行若干了循环后出错停止(没有规律)。
整个循环过程我都很小心的处理指针,free(tp)的tp每次都是有定义的。
不知道如何解决,望高手帮忙!谢谢!- //a指向循环链表值为1的起始节点
- void print_it(node* a, int k)
- {
- int t;
- node* pp =NULL;//previous_pointer
- node* tp = NULL;//temp_pointer
-
- for(t = 1; pp != a; t++){
- if((t % k) == 0){
- pp->next = a->next;
- tp = a;
- a = a->next;
- printf("%d ", tp->data);
- free(tp);//问题在这里,释放invalid pointer
- }
- else{
- pp = a;
- a = a->next;
- }
- }
-
- printf("%d ", a->data);
- free(a);
- a = NULL;
-
- printf("\n");
- }
复制代码 |
|