/*给定的程序中,fun的功能是:在利用两个带头结点的单向链表依次生成一个同向单链表 如:第一个链表为:1、3、5、7 第二个链表为:2、4、6、8、9 链表的结果为: Head->1->2->3->4->5->6->7->8->9->End */ #include <stdio.h> #include <stdlib.h> #define N 10 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *,int);//函数申明 void outlist(SLIST *); SLIST *fun( SLIST *h1,SLIST *h2); SLIST *fun( SLIST *h1,SLIST *h2) { } int main() { SLIST *h1,*h2,*h3; int a[N]={1,3,5,7,9},b[N]={2,4,6,8,10,11}; h1=creatlist(a,5); h2=creatlist(b,6); outlist(h1); outlist(h2); h3=fun(h1,h2); outlist(h3); } SLIST *creatlist(int *a,int n) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); h->next=NULL; for(i=0; i<n; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; q->next=NULL; p->next=q; p=q; } return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } }
时间: 2024-03-11 17:44:56 浏览: 24
这是一个C语言程序,包含了一个结构体定义和三个函数的定义。
结构体SLIST定义了一个单向链表的节点类型,包含了一个int类型的数据和一个指向下一个节点的指针。
函数creatlist用于创建一个带头结点的单向链表,函数的参数包括一个整型数组和数组中元素的数量。函数首先申请一个头结点,然后依次申请节点并将其插入到链表尾部。最后函数返回头结点指针。
函数outlist用于输出一个带头结点的单向链表,函数的参数为链表头结点指针。函数首先检查链表是否为空,如果为空则输出提示信息,否则依次输出链表中节点的数据值。
函数fun用于将两个带头结点的单向链表合并成一个同向单链表,函数的参数为两个链表的头结点指针。函数的实现过程中,可以创建一个新的带头结点的单向链表,然后依次将两个链表中的节点插入到新链表中,最后返回新链表的头结点指针。
在main函数中,程序首先创建了两个带头结点的单向链表,然后输出这两个链表的内容。接着程序调用fun函数将两个链表合并成一个同向单链表,最后输出合并后的链表的内容。
相关问题
单链表分段逆转:给定一个带头结点的单链表和一个整数K,要求将链表中的每K个结点做一次逆转。
单链表分段逆转是一种链表操作,它的目的是将链表中每K个结点分成一段,然后对每一段进行逆转操作。这个操作可以用于链表的排序、查找等操作中。具体实现方法可以参考引用中的思路,即先遍历链表确定需要分段逆转几次,然后建立两个指针数组存储链表结点地址,第一个大小为K用于逆转链表,第二个大小为n/k用于存储每一小段的头结点,注意最后一段如果不需要逆转的话也要把头结点存入。每一块都逆置完成之后通过第二个数组再进行一次遍历使得段与段之间建立起联系(前一段的尾结点指向后一段的头结点)。
编写一个函数,函数的功能是创建一个带头结点的单向链表,返回链表的头结点。
下面是一个示例函数,用于创建一个带头结点的单向链表,并返回链表的头结点:
```c++
#include <iostream>
struct Node {
int data;
Node* next;
};
Node* createLinkedList(int arr[], int n) {
// 创建头结点
Node* head = new Node();
head->next = nullptr;
// 尾指针,用于插入新的节点
Node* tail = head;
// 遍历数组,创建链表节点
for (int i = 0; i < n; i++) {
Node* newNode = new Node();
newNode->data = arr[i];
newNode->next = nullptr;
// 将新节点插入到链表尾部
tail->next = newNode;
tail = newNode;
}
return head;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
Node* head = createLinkedList(arr, n);
// 打印链表
Node* cur = head->next;
while (cur != nullptr) {
std::cout << cur->data << " ";
cur = cur->next;
}
// 释放链表内存
cur = head;
while (cur != nullptr) {
Node* temp = cur;
cur = cur->next;
delete temp;
}
return 0;
}
```
这个函数会根据传入的数组元素创建一个带头结点的单向链表,并返回头结点。在主函数中,我们创建了一个数组 `{1, 2, 3, 4, 5}`,然后调用 `createLinkedList` 函数创建链表,并打印链表的元素。最后,我们需要手动释放链表占用的内存。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)