第12题 判断两个链表是否相交
来源:互联网 发布:杰克棋牌透视软件 编辑:程序博客网 时间:2024/04/30 21:39
题目:判断两个链表是否相交
分析:如果被问道此问题,一定要分两种情况回答,第一种是链表不存在环,第二种就是存在环的情况
1. 先判断带不带环
2. 如果都不带环,就判断尾节点是否相等
3. 如果都带环,判断一链表上俩指针相遇的那个节点,在不在另一条链表,如果在,则相交,如果不在,则不相交
struct node {int data;struct node* next;}//判断带不带环//如果无环,返回0,赋值lastNode//如果有环返回1,赋值circleNodeint isCircle(struct node* head, struct node** circleNode, struct node** lastNode) {struct node* fast = head->next;struct node* slow = head;while(fast != slow && fast && slow) {if(fast->next != NULL)fast = fast->next;if(fast->next == NULL)lastNode = &fast;if(slow->next == NULL)lastNode = &slow;fast = fast->next;slow = slow->next;}if(fast == slow && fast && slow) {circleNode = &fast;return 1;}else {return 0;}}//返回0,表示没有相交//返回1,表示两个链表相交int detect(struct node* h1, struct node* h2) {struct node* circleNode1;struct node* circleNode2;struct node* lastNode1;struct node* lastNode2;int isCircle1 = isCircle(h1, &circleNode1, &lastNode1);int isCircle2 = isCircle(h2, &circleNode2, &lastNode2);//一个有环,一个无环if(isCircle1 != isCircle2)return 0;//两个都无环,判断最后一个节点是否相等else if(!isCircle1 && !isCircle2)return (lastNode1 == lastNode2 ? 1 : 0);//两个都有环,判断环里的节点能否到达另一个链表里的节点else {struct node* temp = circleNode1->next;while(temp != circleNode1) {if(temp == circleNode2)return 1;temp = temp->next;}return 0;}return 0;}
本文参考:http://blog.csdn.net/v_JULY_v/article/details/6447013
- 第12题 判断两个链表是否相交
- 第7题:判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 7. 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个链表是否相交
- 判断两个单向链表是否相交
- 判断两个链表是否相交
- Interview----判断两个链表是否相交?
- js实现最短路经问题
- Android的引用jar包
- PYTHON字典常用函数
- 手势识别
- 没语法错误,可xml文件还总是 报Error in an XML file: aborting build.这错误
- 第12题 判断两个链表是否相交
- vs2005打开exe文件查看资源
- c++【友元】的一些用法
- GestureOverlayView属性
- 使用TortoiseSVN下载sourceforge.net上ogreode源代码的方法
- Qt比较全的资料
- STL相关知识点(2)
- Oracle 传输表空间(Transportable Tablespaces) 示例(一) -- 跨操作系统迁移表空间 (endianness 格式相同)
- PHP语言中global和$GLOBALS[]的区别