저자 중 한 명이 Cormen 인 한 책에서 xor linked list의 흥미로운 문제가 있습니다.xor 연결된 목록에 항목을 추가하는 방법은 무엇입니까?
나는이 항목을 xor 연결 목록에 추가하는 예제를 사용했습니다.
void insertAfter(plistNode pNew, T theElm)
{
plistNode pPrev, pCurrent, pNext;
pPrev = NULL;
pCurrent = pStart;
while (pCurrent) {
pNext = NextNode(pCurrent, pPrev);
if (pCurrent->elm == theElm) {
/* traversal is done */
if (pNext) {
/* fix the existing next node */
pNext->ptrdiff =
(plistNode) ((int) pNext->ptrdiff
^(int) pCurrent
^(int) pNew);
/* fix the current node */
pCurrent->ptrdiff =
(plistNode) ((int) pNew^(int) pNext
^(int) pCurrent->ptrdiff);
/* fix the new node */
pNew->ptrdiff =
(plistNode) ((int) pCurrent
^(int) pNext);
break;
}
pPrev = pCurrent;
pCurrent = pNext;
}
}
나는이 있어야 좋은 답변을
pNext-> ptrdiff = New Xor pNext[next]
감사 같은 것을 제 생각에는이 코드
pNext-> ptrdiff = (plistNode) ((int) pNext-> ptrdiff
^(Int) pCurrent
^(Int) pNew);
을 이해하지 않습니다. 죄송합니다 내 바보 같은 질문에, 왜 첫 번째 라인에 사용 pNext-> ptrdiff
(pNext->ptrdiff = pNext->ptrdiff XOR pCurrent XOR pNew
이 있음). 언뜻 보면 pNext-> ptrdiff
과 관련이없는 pCurrent <====> pNew <====> pNext <====> (NextNode to pNext)
pCurrent와 같은 것으로 보입니다. pCurrent <하십시오 < ===> B < ====> C
을 함유한다
B,
1>에 대한 이전
고맙습니다. 죄송합니다 내 바보 같은 질문에, 왜 첫 번째 줄에 사용됩니다 pNext-> ptrdiff (pNext-> ptrdiff = pNext-> ptrdiff XOR pCurrent XOR pnew). 언뜻 보면, pCurrent가 <====>pNew <====> pNext <====> (NextNode to pNext) 일 때 pCurrent는 pNext-> ptrdiff와 관련이 없습니다. –
pNew를 삽입하기 전에 pNext-> ptrdiff를 수정합니다. 이 단계에서 우리의 링크 된 목록은 다음과 같이 보입니다 : pCurrent <====> pNext <====> (NextNode to pNext) pNext-> ptrdiff를 나중에 우리가 삽입 할 EXPECTATION으로 수정합니다. 나중에 새 – VAT69
당신에게 너무 감사드립니다 –