通过只调整指针(而不是数据)来交换两个相邻的元素

数据结构与算法分析——c语言描述 练习3.3 答案


单链表,这个函数得在头文件和实现文件里面放,因为要修改next指针,所以放在main.c是不行的,除非使用extern 声明一下node节点,那么这样就达不到封装的目的了反而麻烦。

void SwapWithNext(Position BeforeP, List L) {
	Position p1 = Advance(BeforeP);
	Position p2 = Advance(p1);
	BeforeP->Next = p2;
	p1->Next = Advance(p2);
	p2->Next = p1;
}


双链表,还是声明放在头文件,实现放在.c文件

void SwapWithNext(Position P, List L) {
	Position beforeP1, afterP2, p1, p2;
	p1 = P;
	p2 = Advance(p1);
	afterP2 = Advance(p2);
	beforeP1 = Retreat(p1);
	
	beforeP1->Next = p2;
	p2->Next = p1;
	p1->Next = afterP2;

	afterP2->Prev = p1;
	p1->Prev = p2;
	p2->Prev = beforeP1;
}


你可能感兴趣的:(通过只调整指针(而不是数据)来交换两个相邻的元素)