/*核心步骤:
设q为p的前驱结点
交换p和q。
1、p和新前驱连接
2、q和新后继连接
3、p和q互相连接
*/
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* prior, * next;
}LNode, * LinkList;
void Creatlist(LinkList& L, int n)
{
L = new LNode;
L->next = NULL;
L->prior = L;
L->next = L;
LinkList H = L;
while (n--)
{
LinkList p = new LNode;
cin >> p->data;
p->next = L->next;
L->next = p;
p->prior = L;
p->next->prior = p;
L = p;
}
L = H;
}
void Changelist(LinkList& L, int key)
{
LinkList p = L;
while (key--)
{
p = p->next;
}
LinkList q;
q = p->prior;
q->prior->next = p;
p->prior = q->prior;
q->next = p->next;
p->next->prior = q;
p->next = q;
q->prior = p;
p = L->next;
while (p->next && p->next != L)
{
cout << p->data << " ";
p = p->next;
}
cout << p->data << endl;
}
int main()
{
LinkList L;
int n;
while (cin >> n && n)
{
Creatlist(L, n);
int key;
cin >> key;
Changelist(L, key);
}
return 0;
}
循环双向链表的节点交换(c++)
于 2022-03-24 14:04:06 首次发布