酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

c语言已知两个非降序链表序列s1与s2,设计函数构造出s1与s2的交集新链表s3。 1.本题中头文件引用及链表结点类型声明代码如下【此部分代码本题已经内置,无须提交】: #include<stdio.h> #include<stdbool.h> #include<stdlib.h> typedef struct node { int data; struct node *next; } node; 2.本题中main函数已经写好,代码如下【此部分代码本题已经内置,无须提交】: int main() { node *s1, *s2, *s3; //创建第1个链表 s1 = create(); //创建第2个链表 s2 = create(); //生成交集构成的新链表 s3 = getintersection(s1, s2); //释放第1个链表空间 freeall(s1); //释放第2个链表空间 freeall(s2); //输出新链表 printli

```c // 函数用于获取两个链表的交集 node* getintersection(node* s1, node* s2) { node* s3 = NULL; // 初始化交集链表为空 node* tail = NULL; // 用于指向交集链表的尾节点 node* p1 = s1; // 遍历第一个链表的指针 node* p2 = s2; // 遍历第二个链表的指针 while (p1!= NULL && p2!= NULL) { // 当两个链表都未遍历完 if (p1->data == p2->data) { // 如果当前节点数据相等 node* newNode = (node*)malloc(sizeof(node)); // 创建新节点 newNode->data = p1->data; // 赋值 newNode->next = NULL; if (s3 == NULL) { // 如果交集链表为空 s3 = newNode; // 新节点作为头节点 tail = newNode; // 尾节点也指向新节点 } else { // 否则 tail->next = newNode; // 连接到尾节点后面 tail = newNode; // 更新尾节点 } p1 = p1->next; // 移动第一个链表指针 p2 = p2->next; // 移动第二个链表指针 } else if (p1->data < p2->data) { // 如果第一个链表当前节点数据小于第二个 p1 = p1->next; // 移动第一个链表指针 } else { // 否则 p2 = p2->next; // 移动第二个链表指针 } } return s3; // 返回交集链表 } ``` 额外注意点: 1. 要注意内存分配和释放,避免内存泄漏。 2. 处理链表指针移动时要小心,确保不会出现空指针访问。 3. 对于相同数据的处理要保证逻辑正确,不重复添加节点。 [2024-12-05 22:30:36 | AI写代码神器 | 462点数解答]

相关提问