如图:每个节点有三个部分:valuenext,random;除了与单链表相同的next域存放下一个节点的地址random域可以存放任一个节点的地址(即可以指向任一个节点)或者为null;要拷贝一个这样结構的链表,应如何实现
算法思路2:1、新建新节点,拷贝N的节点N'并将其插入到N的后面;
//创建新节点N',将N'连接在N后面 //拆分链表,奇数节点位置为原始链表偶数节点位置为拷贝链表
如图:每个节点有三个部分:valuenext,random;除了与单链表相同的next域存放下一个节点的地址random域可以存放任一个节点的地址(即可以指向任一个节点)或者为null;要拷贝一个这样结構的链表,应如何实现
算法思路2:1、新建新节点,拷贝N的节点N'并将其插入到N的后面;
//创建新节点N',将N'连接在N后面 //拆分链表,奇数节点位置为原始链表偶数节点位置为拷贝链表
这里用到了类模板因为这里的數据部分类型无法确定。
一般习惯将链表头定义的与其他节点不同链表头可以放很多信息,例如:链表长度、作者、修改人、创建日期等等当后面节点加入的时候不会每个节点都有这些信息。
。可以在主函数中试一下链表。。
第四步:链表写好后我们将链表写叺文件中
将文件以读写的方式打开,记得要提前创建文件int.txt因为以读写方式打开文件的时候,如果文件不存在程序不会自动创建。同样以只读打开也是一样,只有以只写打开的时候才会自动创建如果仅仅这样写,编译的时候肯定无法通过因为无法将一个链表类型的數据直接写入文件。我们需要将<<运算符重载
第五步:从文件中读取数据到链表
思路很简单,首先将文件的读写位置设置到首部因为我們在写入文件的时候,读写位置到了最后这时候直接读是读不到数据的。然后将文件里的内容读到临时变量data中然后插入的时候调用有參构造函数,输入参数data生成新链表。读取完退出最后打印显示。
上面的链表只针对一般的数据类型有效如果我们的数据部分是自己構造的类呢?
第一步:创建一个类(以student为例)
这里重载是因为1、打印的时候无法直接直接输入一个Student类型即:cout << stu 是无法直接实现的,
这之后嘚操作大同小异大家可以自行理解。
下面是全代码以及打印结果:
目的就是按照结点的exp域值排序從小到大
1.首先是结点类如下:
2.下面是链表类如下:
3.下面是我的代码,大家帮忙看看为什么不对谢谢了,我写了很久都不正确
* 多项式按exp数據域值从小到大顺序排列