任务描述
本关任务:利用双向循环链表表示一个整数序列,指定一个结点位置用p指向该结点,交换p所指向的结点及其前驱结点的顺序。
编程要求
输入
多组数据,每组数据有三行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔),第三行为p所指向的结点位置。当n=0时输入结束。
输出
对于每组数据分别输出一行,依次输出交换结点顺序后的链表元素,元素之间用空格分隔。
测试说明
平台会对你编写的代码进行测试:
代码
#include<iostream> using namespace std; typedef struct DuLNode { int data; struct DuLNode* next; struct DuLNode* prior; }DuLNode, * DuLinkList; void CreateList(DuLinkList& L, int n) {//建立双向循环链表 L = new DuLNode; L->next = NULL; DuLinkList s = L; for(int i = 0; i < n; i++){ DuLinkList p = new DuLNode; cin >> p->data; p->next = s ->next; s->next = p; s = p; } } void Exchange(DuLinkList& L, int loc) {//双向循环链表中结点的交换 DuLinkList p = L; for (int i = 0; i < loc - 1; i ++) { // 这里注意循环次数是 key - 1 if(p!=NULL){ p = p -> next; } } int temp = p->data; p -> data = p -> next -> data; p -> next -> data = temp; }