写出一个函数,把首指针为head2的简单链表中的结点全部接在首指针为 head1的简单链表的结点之后,形成一个新链表(头指针仍为head1)
时间: 2024-03-23 14:40:43 浏览: 43
可以使用以下的代码实现:
```c
void mergeLinkedList(Node *head1, Node *head2) {
if (head1 == NULL || head2 == NULL) {
return;
}
Node *p = head1;
while (p->next != NULL) {
p = p->next;
}
p->next = head2;
}
```
这个函数接收两个参数:head1和head2,分别代表两个简单链表的头结点。它会遍历head1链表,找到最后一个节点,然后将head2链表接在它后面。最终,head1链表就是两个链表合并后的新链表。
需要注意的是,这个函数没有返回值,它直接修改了head1链表的结构。如果head1或head2为NULL,函数将不会做任何事情。
相关问题
用C语言写出一个函数,把首指针为head2的简单链表中的结点全部接在首指针为 head1的简单链表的结点之后,形成一个新链表(头指针仍为head1)
以下是使用 C 语言实现把两个简单链表合并的代码:
```c
#include <stdio.h>
typedef struct Node {
int val;
struct Node *next;
} Node;
void mergeLinkedList(Node *head1, Node *head2) {
if (head1 == NULL || head2 == NULL) {
return;
}
Node *p = head1;
while (p->next != NULL) {
p = p->next;
}
p->next = head2;
}
int main() {
Node *head1 = (Node*)malloc(sizeof(Node));
head1->val = 1;
head1->next = NULL;
Node *node1 = (Node*)malloc(sizeof(Node));
node1->val = 2;
node1->next = NULL;
Node *node2 = (Node*)malloc(sizeof(Node));
node2->val = 3;
node2->next = NULL;
head1->next = node1;
node1->next = node2;
Node *head2 = (Node*)malloc(sizeof(Node));
head2->val = 4;
head2->next = NULL;
Node *node3 = (Node*)malloc(sizeof(Node));
node3->val = 5;
node3->next = NULL;
Node *node4 = (Node*)malloc(sizeof(Node));
node4->val = 6;
node4->next = NULL;
head2->next = node3;
node3->next = node4;
mergeLinkedList(head1, head2);
Node *p = head1;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
return 0;
}
```
解释一下代码:
- 首先我们定义了一个结构体 `Node`,用于表示链表中的一个结点。其中 `val` 代表结点的值,`next` 指向下一个结点。
- 然后我们定义了一个函数 `mergeLinkedList`,它接收两个参数:`head1` 和 `head2`,分别代表两个简单链表的头结点。它会遍历 `head1` 链表,找到最后一个节点,然后将 `head2` 链表接在它后面。最终,`head1` 链表就是两个链表合并后的新链表。
- 在主程序中,我们创建了两个简单链表 `head1` 和 `head2`,并初始化它们的值。然后我们调用 `mergeLinkedList` 函数将它们合并。
- 最后,我们遍历新链表 `head1`,并输出每个结点的值。
希望这能够帮到你!
题目描述:写出一个函数,把首指针为head2的简单链表中的结点全部接在首指针为 head1的简单链表的结点之后,形成一个新链表(头指针仍为head1). 用C语言完成设计、编辑、编译和调式工作。
以下是实现该功能的C语言代码:
```c
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
// 将head2链表接在head1链表尾部
void append(Node **head1, Node *head2) {
if (*head1 == NULL) { // head1为空链表
*head1 = head2;
} else {
Node *p = *head1;
while (p->next != NULL) {
p = p->next;
}
p->next = head2;
}
}
int main() {
// 创建head1链表
Node *head1 = NULL;
for (int i = 1; i <= 5; i++) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = i;
new_node->next = NULL;
append(&head1, new_node);
}
// 创建head2链表
Node *head2 = NULL;
for (int i = 6; i <= 10; i++) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = i;
new_node->next = NULL;
append(&head2, new_node);
}
// 将head2链表接在head1链表尾部
append(&head1, head2);
// 输出新链表
Node *p = head1;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
该程序首先定义了一个 `Node` 结构体表示链表的每个节点,包含数据域和指向下一个节点的指针域。然后定义了一个 `append` 函数,该函数用于将 `head2` 链表接在 `head1` 链表的尾部。最后在 `main` 函数中创建了 `head1` 和 `head2` 链表,并将 `head2` 链表接在 `head1` 链表的尾部,最终输出新链表的所有节点数据。
阅读全文