q=p;
p=p->next;
q->next=pt3->next; pt3->next=q; pt3=pt3->next; } } q=L; free(q); return OK; }
在2.34至2.36题中
\异或指针双向链表\类型XorLinkedList和指针异或函数XorP定义为: typedef struct XorNode { char data;
struct XorNode *LRPtr; } XorNode *XorPointer;
typede struct { //无头结点的异或指针双向链表 XorPointer Left
Right; //分别指向链表的左侧和右端 } XorLinkedList;
XorPointer XorP(XorPointer p XorPointer q);
// 指针异或函数XorP返回指针p和q的异或值 2.34 假设在算法描述语言中引入指针的二元运算\异或\若a和b为指针
则a⊕b的运算结果仍为原指针类型 且
a⊕(a⊕b)=(a⊕a)⊕b=b (a⊕b)⊕b=a⊕(b⊕b)=a
则可利用一个指针域来实现双向链表L
链表L中的每个结点只含两个域:data域和LRPtr域
其中LRPtr域存放该结点的左邻与右邻结点指针(不存在时为NULL)的异或 若设指针L.Left指向链表中的最左结点 L.Right指向链表中的最右结点
则可实现从左向右或从右向左遍历此双向链表的操作 试写一算法按任一方向依次输出链表中各元素的值
解:
Status TraversingLinkList(XorLinkedList &L char d) {
XorPointer p