双向链表 只使用一个指针
来源:互联网 发布:风靡美国华人网络的菜 编辑:程序博客网 时间:2024/06/07 08:33
typedef struct{void* ptr;int value;}DOUBLE_LINK_T;DOUBLE_LINK_T* insert(DOUBLE_LINK_T* pHead,int value){DOUBLE_LINK_T* pCur = NULL;DOUBLE_LINK_T* pNext = NULL;DOUBLE_LINK_T* pPrevious = NULL;DOUBLE_LINK_T* pNode = NULL;pNode = new DOUBLE_LINK_T;pNode->value = value;// empty double listif( NULL == pHead ){pHead = pNode;pHead->ptr = NULL;}else{//find the cur list nodepPrevious = NULL;pNext = (DOUBLE_LINK_T*) (NULL^(unsigned int)pHead->ptr);if( NULL == pNext ){pHead->ptr = (void*)( NULL^(unsigned int)pNode );pNode->ptr = (void*)( (unsigned int)pHead^NULL );}else{pPrevious = pHead;do{pCur = pNext;pNext = (DOUBLE_LINK_T*) ( (unsigned int)pPrevious^(unsigned int)pCur->ptr );if( NULL != pNext)pPrevious = pCur;}while( NULL != pNext );pCur->ptr = (void*)((unsigned int)pPrevious^(unsigned int)pNode);pNode->ptr = (void*)((unsigned int)pCur^NULL);}}return pNode ;}int printAll(DOUBLE_LINK_T* pHead){DOUBLE_LINK_T* pCur = NULL;DOUBLE_LINK_T* pNext = NULL;DOUBLE_LINK_T* pPrevious = NULL;int nDeep = 0;if( NULL == pHead )return -1;pNext = (DOUBLE_LINK_T*) ( NULL^(unsigned int)pHead->ptr );if( NULL == pNext ){printf(" value =%d \n",pHead->value);}else{pPrevious = pHead;printf(" value =%d \n",pHead->value);do{printf(" value =%d \n",pNext->value);pCur = pNext;pNext = (DOUBLE_LINK_T*) ( (unsigned int)pPrevious^(unsigned int)pCur->ptr );if( NULL != pNext)pPrevious = pCur;}while( NULL != pNext );}return 0;}void doublelist_test(void){int i = 100;DOUBLE_LINK_T* pHead = NULL;DOUBLE_LINK_T* pTail = NULL;pHead = insert(pHead,i++);pTail = insert(pHead,i++);pTail = insert(pHead,i++);pTail = insert(pHead,i++);pTail = insert(pHead,i++);pTail = insert(pHead,i++);printAll(pHead);printf("<================================>\n");printAll(pTail);return ;}int main(int argc,char** argv){doublelist_test();return 0;}
原理: A^B^B = A^(B^B) = A
0 0
- 双向链表 只使用一个指针
- 使用一个指针实现双向链表
- 如何使用一个指针来实现双向链表操作
- [每日练习]如何使用一个指针来实现双向链表操作
- 一个双向链表的单指针实现
- C++使用单指针Struct实现双向链表
- Program work 6. 每个节点只含一个链接点的双向链表实现
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
- 算法导论10.2-8-用一个整数地址替代前后指针实现双向链表
- 使用双向链表
- 实现一个双向链表
- 单指针 实现 双向链表
- 双向链表(二级指针实现)
- 创建一个双向链表或双向循环链表
- 创建一个双向链表或双向循环链表
- 创建一个双向链表或双向循环链表
- 编写一个函数, 给定一个链表的头指针,要求只遍历一次, 将单链表中的元素顺序翻转过来
- 只使用一个适配器
- WinCE和Windows Mobile下使用TinyXML进行C++的开发
- Android数据Json解析之开源jar类Gson解析
- 排序算法--希尔算法
- 设计模式C++实现(2)——策略模式
- 什么是游戏2048的最佳算法
- 双向链表 只使用一个指针
- IOS socket GCDAsyncSocket
- 仿Title样式
- 我的七个建议
- LeetCode Triangle
- IO多路复用之poll总结
- 万网服务器ftp上传出现553 Could not create file
- android.os.NetworkOnMainThreadException
- 监听器启动时报错:TNS-12537: TNS:connection closed/ TNS-00507: Connection closed