两个有序链表的交集c语言实现
时间: 2023-07-12 22:32:02 浏览: 112
以下是两个有序链表的交集的 C 语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if (!headA || !headB) { // 如果有一个链表为空,返回空指针
return NULL;
}
struct ListNode *p1 = headA, *p2 = headB;
struct ListNode *res = NULL, *tail = NULL; // 定义交集链表的头节点和尾节点
while (p1 && p2) {
if (p1->val < p2->val) {
p1 = p1->next;
} else if (p2->val < p1->val) {
p2 = p2->next;
} else { // p1 和 p2 指向的节点的值相等,将该节点加入交集链表
struct ListNode *node = (struct ListNode *) malloc(sizeof(struct ListNode));
node->val = p1->val;
node->next = NULL;
if (!res) { // 如果交集链表为空,将该节点作为头节点
res = node;
tail = node;
} else { // 如果交集链表不为空,将该节点加入尾部
tail->next = node;
tail = node;
}
p1 = p1->next;
p2 = p2->next;
}
}
return res;
}
```
该代码中使用了双指针的方法,定义了指针 p1 和 p2 分别指向两个链表的头节点,然后遍历两个链表,比较节点的值的大小,找到相等的节点并将其加入交集链表中,最后返回交集链表的头节点。
阅读全文