双向循环链表应用
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/15659471.html
双向循环链表应用
已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。
输入格式:
第一行输入元素个数,第二行输入元素值,第三行输入要交换的元素值,第四行输出结果。
输出格式:
输出交换后的结果,中间不用空格分隔,若要交换的值:4,不在数组终,则输出“未找到4”
输入样例:
在这里给出一组输入。例如:
6 1 2 3 4 5 6 6
结尾无空行
输出样例:
在这里给出相应的输出。例如:
123465
结尾无空行
代码如下:
#include<iostream> #define ElemType int using namespace std; typedef struct DuLNode { ElemType elem; struct DuLNode* prior; struct DuLNode* next; }DuLNode,*DuLinkList; DuLinkList input(DuLinkList& head, int x) { head = new DuLNode; head->next = NULL; head->prior = NULL; head->elem = x; DuLNode* p, * q; p = head; for (int i = 0; i < x; i++) { q = new DuLNode; q->next = NULL; q->prior = p; p->next = q; cin >> q->elem; p = q; } return head; } DuLNode* getelem(DuLinkList L, int e) { DuLNode* p; p = L->next; while (p && p->elem != e) p = p->next; return p; } void output(DuLinkList& head, int y) { DuLNode* q; DuLNode* z = getelem(head, y); q = head->next; if (z == NULL) { cout << "未找到" << y; return; } while (q && q != NULL) { if (q != z->prior && q != z) cout << q->elem; else if (q == z->prior) cout << q->next->elem; else if (q == z) cout << q->prior->elem; q = q->next; } } int main() { int a, b; DuLinkList head; cin >> a; head = input(head, a); cin >> b; output(head, b); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」