码迷,mamicode.com
首页 > 其他好文 > 详细

单链表的环操作

时间:2016-04-05 20:08:31      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:单链表   带环链表   

链表介绍:

链表概念--链表是一种线性表,但是并不是顺序存储,而是每个节点里面存储着下一个节点的指针,把存储数据元素的数据串链起来。

技术分享单链表演示图:技术分享


创建结构体

typedef int DataType;

typedef struct ListNode

{

DataType data;

struct ListNode *pNext;

}SListNode, *PSListNode;



求环入口点:


技术分享技术分享技术分享


PSListNode FindEnterNode(PSListNode pHead, PSListNode pMeetNode)

{

PSListNode pNode1 = pHead;

PSListNode pNodeM = pMeetNode;

if (pHead == NULL || pMeetNode == NULL)

{

return NULL;

}

while (pNode1 != pNodeM)

{

pNode1 = pNode1->pNext;

pNodeM = pNodeM->pNext;

}

return pNode1;

}


判断两个链表


是否相交:


技术分享


int IsListCroseWithCycle(PSListNode pL1, PSListNode pL2)

{

PSListNode pL1MeetNode = NULL;

PSListNode pL2MeetNode = NULL;

PSListNode pL1Node = pL1;

PSListNode pL2Node = pL2;

PSListNode pNode = NULL;

if (pL1 == NULL || pL2 == NULL)

{

return 0;

}

pL1MeetNode = HasCycle(pL1Node);

pL2MeetNode = HasCycle(pL2Node);


//都不带环

if (pL1MeetNode == NULL && pL2MeetNode == NULL)

{

while (pL1Node->pNext != NULL)

{

pL1Node = pL1Node->pNext;

}

while (pL2Node->pNext != NULL)

{

pL2Node = pL2Node->pNext;

}

if (pL1Node == pL2Node)

{

return 1;

}

return 0;

}


//两个都带环

if (pL1MeetNode != NULL && pL2MeetNode != NULL)

pNode = pL1MeetNode;

{

while (pNode->pNext != pL1MeetNode)

{

if (pL2MeetNode == pNode)

{

return 1;

}

pNode = pNode->pNext;

}

return 0;

}

}


本文出自 “11275984” 博客,请务必保留此出处http://11285984.blog.51cto.com/11275984/1760551

单链表的环操作

标签:单链表   带环链表   

原文地址:http://11285984.blog.51cto.com/11275984/1760551

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!