这两天关于双向链表的节点的交换,用了很长的时间去学习,理解,敲了好多次,总是达不到效果,就是能想明白,但是在写的时候不是出现这样就是那样的问题,最后参照另外一位CSDN博主的帖子,才写出一个完整的函数,
贴上代码,以便自己以后随时查看,没有图.
void swap(USERINFO *head,USERINFO *left,USERINFO *right)
{
USERINFO *temp;
if (right->next == NULL) //t结点是否为尾结点
{
if (left->next == right) //p,t结点是否相邻
{
//与尾结点相邻的交换代
right->next = left;
right->pre = left->pre;
left->next = NULL;
left->pre->next = right;
left->pre = right;
}
else
{
//与尾结点不相邻的交换代
right->next = left->next;
right->pre->next = left;
temp = right->pre;
right->pre = left->pre;
left->next->pre = right;
left->next = NULL;
left->pre->next = right;
left->pre = temp;
}
}
else
{
if (left->next == right) //p,t结点是否相邻
{
//相邻的交换代
right->next->pre = left;
temp = right->n