把单链表A中的元素复制到单链表B中,用c语言

时间: 2023-11-17 16:08:38 浏览: 30
//定义单链表结构体 typedef struct ListNode { int val; struct ListNode *next; } ListNode; //复制单链表A到单链表B ListNode* copyList(ListNode* head) { if (head == NULL) { return NULL; } ListNode *newHead = (ListNode*)malloc(sizeof(ListNode)); //新链表头结点 ListNode *p = head, *q = newHead; //p指向原链表当前节点,q指向新链表当前节点 while (p != NULL) { q->next = (ListNode*)malloc(sizeof(ListNode)); //创建新节点 q = q->next; //移动新链表当前节点指针 q->val = p->val; //复制节点值 q->next = NULL; //新节点next指针置为空 p = p->next; //移动原链表当前节点指针 } return newHead->next; //返回新链表头结点的next指针 }
相关问题

C语言中怎样用单链表删除重复元素

下面是一个用单链表删除重复元素的C语言代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; } Node, *LinkedList; LinkedList createList(int n); // 创建单链表 void printList(LinkedList list); // 输出单链表 void deleteDuplicates(LinkedList list); // 删除重复元素 int main() { int n; LinkedList list; printf("请输入单链表的元素个数:"); scanf("%d", &n); list = createList(n); printf("原始单链表:"); printList(list); deleteDuplicates(list); printf("删除重复元素后的单链表:"); printList(list); return 0; } LinkedList createList(int n) { int i, data; Node *head, *p, *q; head = (Node *)malloc(sizeof(Node)); head->next = NULL; q = head; for (i = 0; i < n; i++) { printf("请输入第%d个元素:", i + 1); scanf("%d", &data); p = (Node *)malloc(sizeof(Node)); p->data = data; p->next = NULL; q->next = p; q = p; } return head->next; } void printList(LinkedList list) { Node *p = list; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } void deleteDuplicates(LinkedList list) { Node *p = list, *q, *r; while (p != NULL) { q = p; while (q->next != NULL) { if (q->next->data == p->data) { r = q->next; q->next = r->next; free(r); } else { q = q->next; } } p = p->next; } } ``` 这个代码中,我们首先定义了一个`Node`结构体,表示单链表的节点,其中包括数据成员`data`和指向下一个节点的指针`next`。然后,我们定义了一个`LinkedList`类型,表示单链表。`createList`函数用来创建单链表,它接收一个参数`n`,表示单链表的元素个数。在函数内部,我们先创建一个头节点`head`,然后通过循环读入用户输入的元素,并创建一个节点`p`,把它插入到链表的尾部。最后,返回头节点的下一个节点,即为创建好的单链表。 `printList`函数用来输出单链表的所有元素,它接收一个参数`list`,表示要输出的单链表。在函数内部,我们通过循环遍历单链表的每个节点,依次输出它的数据成员`data`。 `deleteDuplicates`函数用来删除单链表的重复元素,它接收一个参数`list`,表示要处理的单链表。在函数内部,我们通过两重循环遍历单链表的每个节点,如果发现有重复的元素,则删除后面的那个节点。具体来说,我们用指针`p`遍历单链表的每个节点,用指针`q`遍历从`p`开始的后面的节点。如果发现`q`指向的节点的数据成员`data`与`p`指向的节点相同,则删除`q`指向的节点,否则,继续往后遍历。这样,当所有的`q`节点都遍历完后,我们再把`p`指向下一个节点,继续遍历。最终,所有的重复元素都被删除了。

用C语言删除单链表中最小的元素

以下是用C语言删除单链表中最小的元素的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 单链表结构体 struct ListNode { int val; struct ListNode *next; }; // 创建单链表 struct ListNode* createList(int arr[], int size) { struct ListNode *head = NULL, *tail = NULL; for (int i = 0; i < size; i++) { struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode)); node->val = arr[i]; node->next = NULL; if (tail == NULL) { head = tail = node; } else { tail->next = node; tail = node; } } return head; } // 删除最小元素 struct ListNode* deleteMin(struct ListNode* head) { if (head == NULL) { return NULL; } struct ListNode *prev = NULL, *minPrev = NULL, *minNode = head; while (head != NULL) { if (head->val < minNode->val) { minPrev = prev; minNode = head; } prev = head; head = head->next; } if (minPrev == NULL) { head = minNode->next; } else { minPrev->next = minNode->next; } free(minNode); return head; } // 打印单链表 void printList(struct ListNode* head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } printf("\n"); } int main() { int arr[] = {4, 2, 8, 1, 5}; int size = sizeof(arr) / sizeof(int); struct ListNode *head = createList(arr, size); printf("原链表:"); printList(head); head = deleteMin(head); printf("删除最小元素后:"); printList(head); return 0; } ``` 运行结果: ``` 原链表:4 2 8 1 5 删除最小元素后:4 2 8 5 ```

相关推荐

最新推荐

recommend-type

c语言实现把文件中数据读取并存到数组中

下面小编就为大家带来一篇c语言实现把文件中数据读取并存到数组中。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

C语言中free函数的使用详解

free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下
recommend-type

C语言中的getchar和putchar的使用方法

主要介绍了C语言中的getchar和putchar的使用方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
recommend-type

C语言统计一篇英文短文中单词的个数实例代码

本文通过实例代码给大家介绍的C语言统计一篇英文短文中单词的个数,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
recommend-type

C语言找出数组中的特定元素的算法解析

主要介绍了C语言中找出数组中特定元素的算法解析,包括找出数组中两个只出现一次的数字的方法,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。