判断两个不带环链表是否相交?若相交,求入口点。
来源:互联网 发布:c语言编写 玫瑰花 编辑:程序博客网 时间:2024/06/01 07:46
通常情况下,不带环的两个链表相交如上图所示。
方法一:<1>先判断链表是否相交
①若相交,那么两个链表的尾节点必然相同。则可以遍历两个链表,判断其尾节点。
②若不相交,则尾节点必然不相同。
<2>若相交,求其入口点
①通过遍历两个链表可以得到其长度(假设为len1和len2),通过比较len(len=abs(len1-len2)),让长的链表先走len步,然后两个链表同时走,当他们遇到第一个相等的节点的时候,即为其入口点。
//判断两链表是否相交typedef struct ListNode { int _data; ListNode *_next;}Node;bool IsCrossList(Node *head1 , Node *head2) //判断两个链表是否相交{ if (head1 == NULL || head2 == NULL || head1->_next == NULL || head2->_next == NULL) { return false; } while (head1) { head1 = head1->_next; } while (head2) { head2 = head2->_next; } return head1 == head2 ? true : false;}
//判断链表的入口点Node *CrossNode(Node *head1,Node *head2){ Node *cur1 = head1; Node *cur2 = head2; size_t len = 0; size_t len1 = 0; size_t len2 = 0; while (cur1) { cur1 = cur1->_next; ++len1; } while(cur2) { cur2 = cur2->_next; ++len2; } len = abs(len1 - len2); if (len1>len2) { for (size_t i=0;i<len;i++) { head1 = head1->_next; } } else { for (size_t i=0;i<len;i++) { head2 = head2->_next; } } while (head1 != head2) { head2 = head2->_next; head1 = head1->_next; } return head1; }
方法二:直接建立两个栈,把链表放入栈中,遵循先进后出原则,尾节点先出,即可判断是否相交。出栈的最后一个相同节点即为入口点。
Node *CrossNode(Node *head1,Node *head2){ if (head1 == NULL || head2 == NULL) { return NULL; } stack<Node*> s1; stack<Node*> s2; //创建两个栈 Node *cur1 = NULL; Node *cur2 = NULL; while (head1 != NULL) { cur1 = head1; s1.push(cur1); head1 = head1->_next; } while (head2 != NULL) { cur2 = head2; s2.push(cur2); head2 = head2->_next; } if (cur1 == cur2) { Node *ret = NULL; while(s1.top() == s2.top()) { ret = s1.top(); s1.pop(); s2.pop(); } return ret; } else { return NULL; }}
阅读全文
0 0
- 判断两个不带环链表是否相交?若相交,求入口点。
- 判断两个链表是否相交,若相交,求交点:1.不带环。2.有可能带环
- ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
- 判断两个链表是否相交,若相交,求交点。(假设链表带环、不带环)
- 判断两个链表是否相交,若相交,求交点,若带环呢/fork继承问题
- 判断两个链表是否相交,若相交,求交点,考虑带环情况实现代码
- 判断两个带环链表是否相交,并求出第一个相交点
- 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
- 链表--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
- 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
- 判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)
- 判断俩个链表是否相交,若相交求交点(考虑带环和不带环)
- 求两个链表是否相交,若相交,求交点(链表可能带环)
- 判断两个链表是否相交(考虑带环与不带环)
- 判断两个链表是否相交,若相交,求交点。
- 判断两个链表是否相交,若相交,求交点
- 判断两个链表是否相交,若相交,求交点
- 判断两链表是否相交,若相交求交点(链表可能带环)
- Java字符串的存储
- 2017 四川省赛 E.Longest Increasing Subsequence【思维+贪心】
- java基础(面试)
- 埃拉托斯特尼筛法 VS 欧拉筛法 (素数筛选) Java
- -webkit-tap-highlight-color
- 判断两个不带环链表是否相交?若相交,求入口点。
- codeforces 676-C. Vasya and String(尺取)
- Hihocoder 1426 E. What a Ridiculous Election (BFS)
- Android笔记(10)MD5加密
- 重要标签总结
- 51NOD1094 和为k的连续区间
- 2.4变动和最终变量(Volatile and Final Variables)
- springmvc数据回显(九)
- Spring注解配置定时任务<task:annotation-driven/>