c++判断两个单链表是否相交
时间: 2024-03-03 11:44:06 浏览: 34
以下是C++判断两个单链表是否相交的代码实现:
```c++
//定义链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//判断两个单链表是否相交(判断尾节点是否相同)
bool isIntersect(ListNode* p1, ListNode* p2) {
ListNode* pHead1 = p1;
ListNode* pHead2 = p2;
if (pHead1 == nullptr || pHead2 == nullptr) {
return false;
}
while (pHead1->next != nullptr) {
pHead1 = pHead1->next;
}
while (pHead2->next != nullptr) {
pHead2 = pHead2->next;
}
//判断尾节点是否相同
if (pHead1 == pHead2) {
return true;
} else {
return false;
}
}
```
相关问题
判断两个线段是否相交 c/c++
以下是判断两个线段是否相交的 C++ 代码实现,假设线段AB和CD:
```
bool intersect(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy) {
double t1 = (cx - dx) * (ay - cy) + (cy - dy) * (cx - ax);
double t2 = (cx - dx) * (by - cy) + (cy - dy) * (cx - bx);
double t3 = (ax - bx) * (cy - ay) + (ay - by) * (ax - cx);
double t4 = (ax - bx) * (dy - ay) + (ay - by) * (ax - dx);
return (t1 * t2 < 0) && (t3 * t4 < 0);
}
```
如果返回值为true,则表示线段AB和CD相交;否则不相交。
如何用c++表示两个圆是否相交
在C++中,可以使用数学几何的知识来判断两个圆是否相交。判断两个圆是否相交的基本思路是计算两个圆心之间的距离,然后与两个圆的半径之和进行比较。
以下是一个示例的C++函数,用于判断两个圆是否相交:
```cpp
#include <iostream>
#include <cmath>
struct Circle {
double x; // 圆心的 x 坐标
double y; // 圆心的 y 坐标
double radius; // 圆的半径
};
bool circlesIntersect(const Circle& c1, const Circle& c2) {
// 计算两个圆心之间的距离
double distance = std::sqrt(std::pow(c2.x - c1.x, 2) + std::pow(c2.y - c1.y, 2));
// 判断两个圆心距离是否小于两个圆的半径之和
if (distance <= c1.radius + c2.radius) {
return true; // 相交
} else {
return false; // 不相交
}
}
int main() {
Circle circle1 = {0, 0, 3}; // 圆1的圆心坐标为(0, 0),半径为3
Circle circle2 = {4, 0, 2}; // 圆2的圆心坐标为(4, 0),半径为2
if (circlesIntersect(circle1, circle2)) {
std::cout << "两个圆相交" << std::endl;
} else {
std::cout << "两个圆不相交" << std::endl;
}
return 0;
}
```
在上述示例中,我们定义了一个 `Circle` 结构体来表示圆的信息。`circlesIntersect` 函数用于判断两个圆是否相交,使用欧几里得距离公式计算圆心之间的距离,并与两个圆的半径之和进行比较。最后,在 `main` 函数中创建两个圆,并调用 `circlesIntersect` 函数来判断它们是否相交。
希望能解答你的问题!如果还有其他疑问,请继续提问。