我需要在xor链表中实现插入后插入但我有问题而且我找不到任何解决方案,插入不能很好但插入第一个工作正常。
示例:
list = 1 2 3 4 5
insertafk(列表,2,99)
结果= 1,2,99,并且一些随机值不是3,4,5,插入有效但我没有新键后的正确元素,我有随机元素
xorlist.h
typedef struct nodetype4
{
int key;
struct nodetype4* np;
}XorNode;
typedef struct
{
XorNode* first;
XorNode* last;
}xlist;
XorNode* XOR(XorNode* a, XorNode* b);
void initXor(xlist* x);
void insertf(xlist* x,int k);
void afisxor(xlist* x);
void insertafk(xlist* x,int akey,int k);
xorlist.c
#include <stdio.h>
#include <stdlib.h>
#include "xorlist.h"
XorNode* XOR(XorNode* a, XorNode* b)
{
return (XorNode*)((unsigned int)a ^ (unsigned int)b);
}
void initXor(xlist* x)
{
x->first=NULL;
x->last=NULL;
}
void insertf(xlist* x,int k)
{
XorNode* p=malloc(sizeof(XorNode));
XorNode* fnext;
p->key=k;
if(x->first==NULL)
{
p->np=NULL;
x->first=p;
x->last=p;
}
else
{
p->np=XOR(x->first,NULL);
fnext=XOR(x->first->np,NULL);
(x->first)->np=XOR(p,fnext);
x->first=p;
}
}
void insertafk(xlist* x,int akey,int k)
{
XorNode* p=malloc(sizeof(XorNode));
p->key=k;
XorNode* curr;
curr=x->first;
XorNode* prev=NULL;
XorNode* next=XOR(NULL,curr->np);
//Cautam nodul cu cheia akey
while(curr!=NULL)
{
if(curr->key==akey)
break;
prev=curr;
curr=next;
next=XOR(curr->np,prev);
}
//Inserare cheie dupa nodul gasit
if(curr==NULL)
printf("Nu s-a gasit cheia");
else
{
p->np=XOR(curr,next);
curr->np=XOR(prev,p);
next->np=XOR(p,curr);
}
}
//print list
void afisxor(xlist* x)
{
XorNode* curr;
XorNode* prev;
XorNode* next;
curr=x->first;
prev=NULL;
while(curr!=NULL)
{
printf("%d ",curr->key);
next=XOR(curr->np,prev);
prev=curr;
curr=next;
}
printf("\n");
}
的main.c
#include <stdio.h>
#include <stdlib.h>
#include "xorlist.h"
int main()
{
printf("For xor list:\n");
xlist* x;
initXor(&x);
insertf(&x,1);
insertf(&x,2);
insertf(&x,3);
insertl(&x,10);
insertl(&x,13);
afisxor(&x);
insertafk(&x,2,20);
afisxor(&x);
return 0;
}