【发布时间】:2016-01-22 17:55:55
【问题描述】:
XOR 链表基本上是链表的有效版本,它存储前一个和下一个节点的地址,以仅使用单个指针来实现双链表。 我想知道是否可以在 Java 中实现,因为它没有指针。 在 C 中,这可以通过
/* Insert a node at the begining of the XORed linked list and makes the
newly inserted node as head */
void insert(struct node **head_ref, int data)
{
// Allocate memory for new node
struct node *new_node = (struct node *) malloc (sizeof (struct node));
new_node->data = data;
/* Since new node is being inserted at the begining, npx of new node
will always be XOR of current head and NULL */
new_node->npx = XOR(*head_ref, NULL);
/* If linked list is not empty, then npx of current head node will be XOR
of new node and node next to current head */
if (*head_ref != NULL)
{
// *(head_ref)->npx is XOR of NULL and next. So if we do XOR of
// it with NULL, we get next
struct node* next = XOR((*head_ref)->npx, NULL);
(*head_ref)->npx = XOR(new_node, next);
}
// Change head
*head_ref = new_node;
}
【问题讨论】:
-
在 Java 中通常不可能对指针执行算术运算,因为它们总是被视为对对象的引用,而不是数字。
-
我很好奇任何双向链表在 Java 中的实现可能是什么,它是否已经在做一些类似于 OP 的事情?
-
这个问题是在微软面试时问我的,我很震惊,用单指针实现双向链表是可能的
-
您是否可以在数组中使用索引而不是实际指针?反正差别不是很大..
标签: java xor-linkedlist