已知p指向双向循环链表中的一个结点,其结点结构(data,prior,next),写出算法Exchange(p),交换所指向的结点及其前驱结点的顺序。
编写程序测试Exchange函数。
输出结果:
主要算法:
//交换位置
int Exchange(DuLinkList& L)
{
cout << "请问你准备交换的是第几个结点:";
int n;
cin >> n;
DuLinkList p = L;
while (n--)
{
p = p->next;
}
DuLinkList q = p->prior;
q->prior->next = p;
p->prior = q->prior;
q->next = p->next;
p->next->prior = q;
q->prior = p;
p->next = q;
return 0;
}
完整代码:
#include <iostream>
using namespace std;
//定义双向循环链表
typedef struct DuLNode
{
int data;
struct DuLNode* prior;
struct DuLNode* next;
}DuLNode,*DuLinkList;
//初始化链表
int InitList(DuLinkList &L)
{
L = new DuLNode;
L->next = L;
L->prior = L;
return 0;
}
//构造链表
int ConsList(DuLinkList& L)
{
cout << "请输入链表元素的个数:";
int n;
cin >> n;
DuLinkList r = L;
cout << "请输入链表:";
for (int i = 0; i < n; i++)
{
DuLinkList p = new DuLNode;
cin >> p->data;
r->next = p;
p->prior = r;
p->next = L;
r = p;
}
return 0;
}
//输出链表
int Print(DuLinkList L)
{
DuLinkList p = L->next;
while (p!=L)
{
cout << p->data<<" ";
p = p->next;
}
return 0;
}
//交换位置
int Exchange(DuLinkList& L)
{
cout << "请问你准备交换的是第几个结点:";
int n;
cin >> n;
DuLinkList p = L;
while (n--)
{
p = p->next;
}
DuLinkList q = p->prior;
q->prior->next = p;
p->prior = q->prior;
q->next = p->next;
p->next->prior = q;
q->prior = p;
p->next = q;
return 0;
}
int main()
{
DuLinkList L;
InitList(L);
ConsList(L);
Exchange(L);
cout << "与前一个结点交换后的链表元素为:";
Print(L);
return 0;
}