无符号long返回指向类

时间:2017-06-18 14:41:59

标签: c++

现在,我正在练习使用C ++来介绍算法。 问题是:

  

解释如何仅使用一个指针实现双向链表   值x.np每个项目而不是通常的两个(next和prev)。假设   所有指针值都可以解释为k位整数,和   定义x.np = x.next XOR x.prev,k-bit" exclusive-or" x.next   和x.prev。 (值NIL由0表示)。一定要描述一下   您需要什么信息才能访问列表的头部。演示如何   在这样的列表上实现SEARCH,INSERT和DELETE操作。   还显示了如何在O(1)时间内反转这样的列表。

在XOR函数中,我首先将指向class的指针转换为unsigned long和Xor这两个值。然后将结果转换回指向class的指针。我不知道它为什么不起作用。这是我的代码:

struct node
{
int key;

node *np;
} ;

struct list_n
{
node *head;

node *tail;
};

以上是两个结构,下面是插入

void insert_element(list_n *_list, int _key)
{
    node *present_node= new node;

    present_node->key=_key;

    present_node->np=xor_gate(nullptr,_list->tail);

    if(_list->tail) _list-> tail->np=xor_gate(present_node,xor_gate(nullptr,_list->tail->np ));

    if(!_list->head) _list->head=present_node;

    _list->tail=present_node;
}

以下是Xor门:

node *xor_gate(node *left,node *right)
{
    unsigned long result;

    result =  ( reinterpret_cast<unsigned long>(left) ) ^  ( reinterpret_cast<unsigned long>(right) );

    node *output =new node;

    output = reinterpret_cast<node*> (result);  // yes or no

    return output ;
}


void list_n_inti(list_n *a )
{
    a->head =nullptr;

    a->tail =nullptr;
}

我已多次查看代码。我认为这个问题是由XOR门引起的。

如果您发现了错误,请告诉我。如果你有任何其他方法来回答这个问题。请告诉我。

谢谢

1 个答案:

答案 0 :(得分:1)

xor_gate中存在内存泄漏,但我认为如果将代码编译为32位,则代码可以正常工作。如果将其编译为64位,则unsigned long通常不能包含指针。

试试这个:

#include <cstdint>  // for uintptr_t

node *xor_gate(node *left,node *right)
{
    using std::uintptr_t;

    uintptr_t result =  ( reinterpret_cast<uintptr_t>(left) ) ^  ( reinterpret_cast<uintptr_t>(right) );

    return reinterpret_cast<node*> (result);
}