C语言 链表 指针问题我做了一个题,题目要求一次性输入n(自己输入)个链表,然后逐行输出该链表反转(如1234转为4321)。我用循环输入了几个链表,并用自己设的新的头节点指向这个反转后的链表,然后将将这个新的头结点存入一个数组。但是输出结果却显示了n行我第n个链表的反转。于是我想实现将这个头结点存入数组后再清空他进入下一轮循环赋值,结果输出确实n行空。。。。。有没有什么办法删除指针但不释放他的内存?
1、删除指针,并不会释放他指向的内存地址。
2、如果你指向的地址还需要用,为什么要删除其指针。同一个地址可以有多个指针。
你可以在结构里定义2个链表指针,分别是正向和反向,这样你输入的的时候,就直接得到正反两个链表了。我写了案例,你参考吧。
#include <stdio.h>双向链表也可以,但是题目要求建立单链表,没办法😂
你说的第二点:我是想将地址保存到数组里,然后指针指向新的地址再保存到数组里,依次类推,但是我对指针重新复指后却覆盖了上一轮的输入
追答双,单都是一个写法,无非我正反链表的连接都写在一个函数里,你把反向的单独拿出来写,不就是单链表反向了么。
追问现在问题不在反向上,我估计可能是链表的建立那里有问题,我再检查检查,还有问题就麻烦大家了😂
追答“我是想将地址保存到数组里,然后指针指向新的地址再保存到数组里”
我写的就是你想要的啊,你看stt0[]和stt1[]这两数组不就是你想要的么,链表首指针组成的数组。
解决了
没有初始化它😂😂😂
对
可是重新赋值的话,那块内存值也会变化啊,也就是我输入n行数据,最后这样循环赋值,可结果也只是第n个数据
追答那看你如何控制了,赋值给变量,当然内存数据会变化啊,只是变量的地址不变化。
我想将指针放入数组后,重新赋值,所以要"清空"一下指针,但不释放他所指的内存,不然就白弄了
最后的输出我想用数组数组输出,所以内存不能动,想在输入部分的每一遍循环最后,把指针删掉重新定义
追答用代码举个例子吧,假设有个链表【a,b,c,d,e......】,这些a,b,c,d,e......都是Node *指针类型,头节点指针为h,你新建了一个数组Node arr[100],然后你想做什么?
追问这是第一个链表,执行arr[i] = head
循环n次(n为我要输入的链表数)
我把第一个放入后,再输入第二个会发生将上一个内存覆盖的结果,也就是比如我输入了三行链表123,1234,12345,最后拿数组输出的时候是三行54321。。。
追答看你的描述,问题应该是出在你创建链表的地方,你以为你创建了3个链表,其实这3个链表用的是同一个存储空间,也就是你只创建了1个链表,即使你不做反转,你这3个链表输出也都会是3行12345。
追问感觉有道理,我再检查检查
谢谢啦,解决了,
没有初始化它
本回答被提问者采纳