首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

XOR链表的C代码

XOR链表是一种特殊的链表数据结构,它通过使用异或运算(XOR)来实现链表节点之间的链接。每个节点中存储了前一个节点和后一个节点的地址的异或结果。

以下是XOR链表的C代码示例:

代码语言: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链表的优势在于它可以通过异或运算实现节点之间的链接,节省了额外的空间开销。它适用于需要高效地在链表中进行插入和删除操作的场景。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券