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

一个不带头结点的双向循环链表,现在交换任意两个结点(这两个结点不一定相邻),代码如何写

2012-09-07 
一个不带头结点的双向循环链表,现在交换任意两个结点(这两个结点不一定相邻),代码怎么写?如题,双向循环链

一个不带头结点的双向循环链表,现在交换任意两个结点(这两个结点不一定相邻),代码怎么写?
如题,双向循环链表真的好烦,怎么弄都不懂!!!

[解决办法]
你用一张纸画图,画着画着你就明白了,我学数据结构这一块就是这样,不这样做很抽象很难理解。
对于你的问题,其实也不难,我给你思路
既然是双向链表,那就意味着,你可以根据一个给出的节点,prev next两个成员就可以知道前节点和后节点
交换节点的话其实并不是换位置,只是改一下指针的指向。
prevA nodeA nextA A节点和它的前后节点
prevB nodeB nextB B节点和它的前后节点
交换可以这样实现 prevA的next成员指向改为nodeB nextA的prev成员指向改为nodeB,再将nodeB的prev next成员 指向改为prevA 和 nextA 这样一弄,就把nodeB放到了prevA 和 nextA之间了(“之间"只是一个形象的说法,实际内存地址是没有移动的,链表本来就不是一个顺序存储的结构)
然后只要把nodeA放到prevB和nextB之间就行,这个和上面同理。
因为是双向链表,所以不用考虑头尾节点的特殊情况。

热点排行