当前位置: 首页 > news >正文

C如何使用XOR运算 古法制作链表(异或链表)

依旧是看到Tsoding的视频
链接如下
【编程派对小技巧 | Tsoding】 https://www.bilibili.com/video/BV1iu2mByEXB/?share_source=copy_web&vd_source=f81fbf4a49f2ebfee7f0e9e8e4ef928f
不过还是不如自己看源代码

手机UI点这个 \\

思路应该是:

我们有异或运算符,(它的逆运算是自己)就是说它可以使用前两个值推导出第三个值:
例如加入时可以替换掉end迭代器 (和cpp指向最后一个元素的后面不同,这里☞最后一个元素) 替换成加入的新地址,旧的变为^=新地址
例如遍历时传入迭代器(传入end会反转)更新表达式调用一个prev(每次操作前要更新为0)用于维护上一个值,然后Node next = (Node)(node->xorn ^ *prev);安全起见可以归零 虽然这玩意本身就很难安全,没什么人用
指针不能直接异或运算,我们可以使用结构体包含值 (uintptr_t类型),然后辅助运算

如下,倒着看一遍

比如要先存入数据,就要维护一个当前值和一个prev值,在链表为空的时候,需要CreateNode函数创建节点再处理维护begin和end,不为空就可以正常异或赋值传值

Node* CreateNode(int value) {Node* node = (Node*)calloc(1, sizeof(Node));node->value = value;node->xorn = 0;return node;
}
void ll_append(XORLinkedList* ll,int value){if(ll->begin == NULL){assert(ll->end == NULL);Node *node = CreateNode(value);ll->begin = node;ll->end = node;return;}Node *node = CreateNode(value);ll->end->xorn ^= (uintptr_t)node;node->xorn = (uintptr_t)ll->end;ll->end = node;
}

遍历时需要维护prev

Node* NodeNext(Node* node,uintptr_t * prev ){Node *next = (Node*)(node->xorn ^ *prev);//Node *next = (Node* )((Node*).xorn ^ (Node*)prev);*prev = (uintptr_t)node;return next;
}

然后就

    for(Node* iter = eg.begin; iter != NULL;iter = NodeNext(iter, &prev)) {printf("%d ", iter->value);}

ll_append 0~9
输出0 1 2 3 4 5 6 7 8 9
其实还是看一遍源码更有用()

http://www.jsqmd.com/news/331051/

相关文章:

  • 基于单片机的锂电池无线充电电路设计
  • 【课程设计/毕业设计】基于SSM的在线商城系统基于SSM的网络商城【附源码、数据库、万字文档】
  • 近5000万人次使用百度APP文心助手AI功能抢红包
  • 【课程设计/毕业设计】基于SSM的作业管理系统校园资讯、线上题库【附源码、数据库、万字文档】
  • 比话降AI实测:知网AI率从67%降到8%全过程
  • 【课程设计/毕业设计】】基于SSM的高校课程管理系统的设计与实现基于SSM的课程管理系统基于SSM的专业课程教学过程管理系统【附源码、数据库、万字文档】
  • 比话降AI适合什么人用?使用场景分析
  • 大数据架构师必备:Eureka高并发场景下的优化策略
  • 比话降AI使用教程:3步搞定知网AIGC检测
  • 微调生成特定写作风格助手
  • 毕业论文用比话降AI安全吗?隐私问题解答
  • 停止无效备考!软考老金团队的“通关公式”已破解2026高项
  • 比话降AI价格贵不贵?性价比分析
  • 科研级置信区间(CI)曲线可视化实战(Matplotlib)
  • 运维人的尽头,只能是无休止的“救火”吗?
  • Excel秘技:用宏表函数获取打开的工作簿名与按颜色求和
  • 基于python的语音合成实现
  • Excel遗珠:揭秘宏表函数GET.WORKBOOK,一键获取所有工作表名
  • JavaScript基础入门:核心概念全解析
  • 告别传统盘点难题!RFID资产管理系统支持自动识别与移动盘点
  • Claude Code 抓包指南
  • Java新手必看:快速配置环境与首个程序
  • springboot基于安卓的智慧旅游向导app的设计与开发
  • 2026年 蚀刻网片厂家推荐排行榜:汽车喇叭网/音响网/过滤网/防虫网/吸尘器网片等精密蚀刻加工技术深度解析
  • Telink芯片开发matter 建立新light-app项目
  • ScalingLaws-2022-Chinchilla-4:如何使用已有论文中的经验公式与方法【复用方法,轻量标定自己的常数】
  • 告别逐行敲码!Vibe Coding让AI当你的专属开发搭子,小白也能速出产品
  • 2026年蚀刻工艺厂家实力推荐榜:金属/五金/不锈钢/铜蚀刻,卷对卷/片材/精密蚀刻,专业源头工厂技术解析与选购指南
  • 2026年 蚀纹模具厂家推荐排行榜:木纹/钻石纹/皮纹/拉丝纹/几何纹/布纹/汽车内饰蚀纹,专业定制与精湛工艺深度解析
  • 大话西游2 人物属性计算器