循环双链表,无头结点,一其中一个接点为p,将P与后续节点交换的算法

来源:百度知道 编辑:UC知道 时间:2024/07/07 00:30:40
求高手指点!谢了!

void swapNode( Node *a, Node *b )
{
Node temp;
Node *tempp;

temp = *a;
*a = *b;
*b = temp;

tempp = a->left;
a->left = b->left;
b->left = tempp;

tempp = a->right;
a->right = b->right;
b->right = tempp;
}

把p和p->right(或p->left,看你怎么看"后续"了)传入函数应该就可以(我没测试,写链表太麻烦了,手头没有现成的)。

基本思路是交换结点的数据而不交换指针,但数据可能很多很繁琐,所以先交换整个结点的内容,再把指针交换回去。

实际上只交换数据(不包括指针)开辟空间更少,运行也应该更有效率,但那样的办法没有重用性,而且我不知道你的链表数据是什么。

定义
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode next, prior;
next指向结点的后继,prior
指抽结点前驱
}LNode,*LinkList;
void ExchangeNode(LinkList &T,LinkList p)
{
LinkList q ,r=NULL;
q=L;
for(;q->next!=p&&q;r=q->prior,q=q->next);
用r指向p的前驱,用q指向p的后继
p->data<-->