#include <stdio.h>
#include <stdlib.h>
typedef int element;
typedef struct linkedNode
{
element data;
struct linkedNode* xorPrNe;
} linkedNode;
typedef struct xordll
{
linkedNode* head;
}xordll;
xordll* createDLL()
{
xordll* newxor = (xordll*)malloc(sizeof(xordll));
newxor->head = NULL;
return newxor;
}
linkedNode* getXOR(linkedNode* a, linkedNode* b)
{
return (linkedNode*)(((unsigned long)a) ^ ((unsigned long)b));
}
void insertNodeElement(xordll* xordll, element data)
{
linkedNode* newNode = (linkedNode*)malloc(sizeof(linkedNode));
linkedNode* prev = NULL;
linkedNode* next = NULL;
newNode->data = data;
int cnt = 0;
linkedNode* target;
// 처음
if (xordll->head == NULL) {
newNode->xorPrNe = getXOR(prev, next);
xordll->head = newNode;
}
else
{
target = xordll->head;
while (target) {
cnt++;
//첫번째 노드의 경우
if (cnt == 1) {
prev = NULL;
next = target->xorPrNe;
}
else
{
next = getXOR(target->xorPrNe, prev);
prev = getXOR(target->xorPrNe, next);
}
prev = target;
target = next;
}
target = prev;
prev = getXOR(target->xorPrNe, NULL);
newNode->xorPrNe = getXOR(target, NULL);
next = newNode;
target->xorPrNe = getXOR(prev, next);
}
}
void printElement(xordll* dll)
{
if (dll->head == NULL) {
printf("\n List is empty");
return;
}
int cnt = 0;
linkedNode* target = dll->head;
linkedNode *prev = NULL, *next = NULL;
while(target) {
cnt++;
// 첫 노드의 경우
if (cnt == 1) {
prev = NULL;
next = target->xorPrNe;
}
else
{
next = getXOR(target->xorPrNe, prev);
prev = getXOR(target->xorPrNe, next);
}
printf("\n %d ", target->data);
prev = target;
target = next;
}
}
int main()
{
xordll* newdll = createDLL();
printf("\ninsert data ....");
insertNodeElement(newdll, 1);
insertNodeElement(newdll, 2);
insertNodeElement(newdll, 3);
insertNodeElement(newdll, 4);
printElement(newdll);
}




최근 덧글