C语言代码实现判断两个单向链表是否相交
时间: 2024-12-21 21:21:13 浏览: 8
数据结构(C语言版)
C语言中,我们可以使用快慢指针的方法来判断两个单向链表是否相交。这种方法的核心思想是利用两个指针,一个移动较快(每次前进两步),另一个移动较慢(每次前进一步)。如果两个链表有交叉点,那么快指针一定会在某个时刻追上慢指针。
以下是简单的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 判断两个链表是否有交点
int hasIntersection(ListNode* headA, ListNode* headB) {
if (!headA || !headB) return 0; // 如果任一链表为空,则无交点
ListNode* slow = headA;
ListNode* fast = headB;
while (slow && fast) {
if (slow == fast) { // 如果慢指针追上了快指针,说明存在交点
return 1;
}
slow = slow->next ? slow->next : headB; // 如果慢指针到达尾部,就从头开始比较快指针
fast = fast->next ? fast->next->next : NULL; // 快指针也向前推进两步
}
return 0; // 没有交点
}
// 测试函数
void test() {
// 创建链表示例...
// 调用hasIntersection函数判断它们是否相交
// 输出结果...
}
int main() {
test();
return 0;
}
```
在这个代码中,`hasIntersection` 函数接收两个链表的头节点作为参数,并返回一个布尔值表示链表是否存在交点。
阅读全文