c_cpp 160.两个链接列表的交集 - 简单 - 2018.8.6
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 160.两个链接列表的交集 - 简单 - 2018.8.6相关的知识,希望对你有一定的参考价值。
/**
1:把 LA 的尾巴链接到 LA 的头部,创造一个循环
2:按照题目 142 的解法来找到连接点
*/
class Solution {
public:
ListNode *detectCycle( ListNode *head ) {
ListNode *slow = head, *fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
ListNode *slow2 = head;
while (slow2 != slow) {
slow2 = slow2->next;
slow = slow->next;
}
return slow2;
}
}
return NULL;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (headA == NULL || headB == NULL) return NULL;
// 先制造一个 loop
ListNode *tailNodeA = headA;
while (tailNodeA->next != NULL) {
tailNodeA = tailNodeA->next;
}
tailNodeA->next = headA;
// 找链表相遇的节点
ListNode *meetNode = detectCycle(headB);
// 恢复现场
tailNodeA->next = NULL;
return meetNode;
}
};
以上是关于c_cpp 160.两个链接列表的交集 - 简单 - 2018.8.6的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 交集,两个排序数组的并集
list的取差集
c_cpp 合并两个已排序的链接列表
c_cpp 添加由链接列表表示的两个数字
c_cpp 合并两个已排序的链接列表,使合并列表的顺序相反
c_cpp 比较表示为链接列表的两个字符串