
数据结构
ljx_csdn
菜鸟成长记!!
展开
-
复杂链表的复制
题目:请实现函数ComplexNode* Clone(ComplexNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:struct ComplexNode{int m_nValue;ComplexNode* m_pNext;ComplexNode* m_转载 2016-03-21 15:31:37 · 722 阅读 · 1 评论 -
求链表相交时的交点(C语言)
//链表相交时的交点PSListNode IntersectionNode(PSListNode pL1, PSListNode pL2){ int count1 = 0; int count2 = 0; PSListNode PSList1 = pL1; PSListNode PSList2 = pL2; PSListNode pMeetNode1 =原创 2016-04-14 20:06:16 · 904 阅读 · 0 评论 -
判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
int IsListCroseWithCycle(PSListNode pL1, PSListNode pL2){ PSListNode pMeetNode1 = HasCycle(pL1); PSListNode pMeetNode2 = HasCycle(pL2); if ((NULL == pL1) || (NULL == pL2)) { re原创 2016-04-14 20:05:15 · 736 阅读 · 0 评论 -
判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)
int IsListCrose(PSListNode pL1, PSListNode pL2){ if ((NULL == pL1) || (NULL == pL2)) { return 0; } else { PSListNode PSList1 = pL1; PSListNode PSList2 = pL2原创 2016-04-14 20:04:22 · 589 阅读 · 0 评论 -
判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)
PSListNode HasCycle(PSListNode pHead){ if ((NULL == pHead) || (NULL == pHead->pNextNode)) { return NULL; } else { PSListNode pFast = pHead->pNextNode->pNextNode;原创 2016-04-14 20:03:00 · 654 阅读 · 0 评论 -
查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
PSListNode FindLastKNode(PSListNode pHead, int K){ if ((NULL == pHead) || (K <= 0)) { return NULL; } else { PSListNode pFast = pHead; PSListNode pSlow = pHe原创 2016-04-14 20:01:05 · 1211 阅读 · 0 评论 -
查找单链表的中间节点,要求只能遍历一次链表(C语言)
PSListNode FindMidNode(PSListNode pHead){ if (NULL == pHead) { return NULL; } else { //快慢指针,快指针一次循环走两步,慢指针一次循环走一步 PSListNode pSlow = pHead; PSListNo原创 2016-04-14 20:00:03 · 1051 阅读 · 0 评论 -
合并两个有序链表,合并后依然有序(C语言)
PSListNode MergeList(PSListNode pL1, PSListNode pL2){ PSListNode pNewNode = NULL; PSListNode pListNode1 = pL1; PSListNode pListNode2 = pL2; PSListNode pNode = NULL; if (NULL == pLi原创 2016-04-14 19:57:39 · 3208 阅读 · 0 评论 -
单链表排序(冒泡排序)(C语言)
优化版:void SortList(PSListNode pHead){ if (NULL == pHead) { return; } else { int flag = 0; PSListNode pTailNode = NULL; //当设置的尾节点与头结点指向同一个节点时,说明只...原创 2016-04-14 19:53:46 · 19506 阅读 · 9 评论 -
逆置/反转单链表(C语言)
1、逆置链表:前插法void ReverseList(PSListNode* pHead){ if (NULL == *pHead) { return; } else { //创建一个新的空链表,遍历pHead指向的链表里的所有节点,每找到一个,就前插到新链表里 PSListNode pNewHead = *pHead; *pHea原创 2016-04-14 18:51:39 · 1028 阅读 · 0 评论 -
单链表实现约瑟夫环(JosephCircle)(C语言)
//使链表形成一个环void FormCyc(PSListNode *pHead){ if (NULL == pHead) { return; } else { PSListNode pNode = *pHead; while (NULL != (pNode->pNextNode)) {原创 2016-04-14 18:47:51 · 1081 阅读 · 0 评论 -
在无头单链表的一个非头节点前插入一个节点(C语言)
①时间复杂度为N:void InsertNotHead(PSListNode pHead, PSListNode pos, DataType data){ PSListNode pPreNode = pHead; PSListNode pPreNode = pHead; if (NULL == pos) { return; } els原创 2016-04-14 18:45:52 · 926 阅读 · 0 评论 -
删除一个无头单链表的非尾节点(C语言)
void DelNotTailNode(PSListNode pos){ PSListNode pNode = NULL; assert(pos); if (NULL == pos->pNextNode) { return; } else { DataType temp = 0; //交换pos和原创 2016-04-14 15:40:23 · 2108 阅读 · 1 评论 -
从尾到头打印单链表(C语言)
void PrintListTailToHead(PSListNode pHead){ if (NULL != pHead) { //递归实现 PrintListTailToHead(pHead->pNextNode); printf("%d ", pHead->data); }}递归方式很容易就能实现。原创 2016-04-14 15:20:13 · 1779 阅读 · 0 评论 -
求两个已排序单链表中相同的数据(C语言)
PSListNode ByeNode(DataType data){ PSListNode pNewNode = (PSListNode)malloc(sizeof(struct SListNode)); if (NULL != pNewNode) { pNewNode->data = data; //注意使开辟的新节点的指向为空原创 2016-04-14 20:07:28 · 1055 阅读 · 0 评论