当前位置: 首页 > 工具软件 > A2O > 使用案例 >

上机3rd作业-设以带头结点的双向循环链表表示的线性表L= (a1,a2,…,an),试写一时间复杂度O(n)的算法,将L改造为 (a1,a3,…,an,…,a4,a2)。

糜征
2023-12-01
void DoubleLink::op()
{
	cout << "进行操作……" << endl;
	Node *p1, *p2, *p4;
	p1 = phead->pre;//初始化为an,指向当前最后一个元素
	if (count % 2 == 0)
		p2 = p1->pre->pre;
	else
		p2 = p1->pre;
	do
	{
		//建立待处理偶数am和当前最后一个元素之间的联系
		p4 = p2->pre;//备份am-1
		p2->pre = p1;
		p1->next = p2;
		//建立am-1和am+1之间的联系
		p4->next = p2->next;
		p2->next->pre = p4;
		p1 = p2;//更新p1,指向当前的最后一个元素
		p2 = p4->pre;//更新p2,指向am-2	
	} while (p2!= phead);
	p1->next = phead;//最后把头结点和最后一个元素建立联系
	phead -> pre = p1;
}

还是要多动脑多画图

 类似资料: