XOR链表是一种特殊的链表数据结构,它通过使用异或运算(XOR)来实现链表节点之间的链接。每个节点中存储了前一个节点和后一个节点的地址的异或结果。
以下是XOR链表的C代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
// 定义XOR链表节点结构
typedef struct Node {
int data;
struct Node* xor_ptr; // 存储前一个节点和后一个节点地址的异或结果
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->xor_ptr = NULL;
return newNode;
}
// 在链表末尾插入节点
void insert(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
Node* curr = *head;
Node* prev = NULL;
Node* next;
while (curr->xor_ptr != prev) {
next = (Node*)((uintptr_t)prev ^ (uintptr_t)(curr->xor_ptr));
prev = curr;
curr = next;
}
newNode->xor_ptr = (Node*)((uintptr_t)curr ^ (uintptr_t)NULL);
curr->xor_ptr = (Node*)((uintptr_t)prev ^ (uintptr_t)newNode);
}
}
// 打印XOR链表
void printList(Node* head) {
Node* curr = head;
Node* prev = NULL;
Node* next;
while (curr != NULL) {
printf("%d ", curr->data);
next = (Node*)((uintptr_t)prev ^ (uintptr_t)(curr->xor_ptr));
prev = curr;
curr = next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 插入节点
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
insert(&head, 4);
insert(&head, 5);
// 打印链表
printf("XOR链表内容:");
printList(head);
return 0;
}
这段代码实现了XOR链表的创建、插入和打印功能。XOR链表的优势在于它可以通过异或运算实现节点之间的链接,节省了额外的空间开销。它适用于需要高效地在链表中进行插入和删除操作的场景。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云