用C语言写代码(只需要核心代码):不带头节点的两个链表,删除链表L1中值为x的元素,再将链表L1插入L2链表值为y的元素之后
时间: 2024-12-25 14:09:40 浏览: 1
以下是使用C语言编写的核心代码,实现了不带头节点的两个链表操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除L1中值为x的元素
Node* deleteNode(Node** head, int x) {
if (*head == NULL)
return NULL;
if ((*head)->data == x) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return *head;
}
Node* current = *head;
while (current->next != NULL && current->next->data != x) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
}
return *head;
}
// 插入L1到L2链表值为y之后
void insertAfter(Node** head1, Node** head2, int x, int y) {
if (*head1 == NULL || *head2 == NULL)
return;
Node* newNode = malloc(sizeof(Node));
newNode->data = y;
newNode->next = NULL;
// 查找L2中值为x的位置
for (Node* p = *head2; p != NULL && p->data != x; p = p->next);
if (p == NULL) { // 如果x没找到,则直接添加在末尾
p->next = newNode;
} else {
newNode->next = p->next;
p->next = newNode;
}
}
int main() {
Node* L1_head = ... // 初始化L1的头结点
Node* L2_head = ... // 初始化L2的头结点
// 删除L1中值为x的元素
L1_head = deleteNode(&L1_head, x);
// 插入L1到L2链表值为y之后
insertAfter(&L1_head, &L2_head, x, y);
return 0;
}
```
在这个代码示例中,`deleteNode`函数用于从链表L1中删除值为x的元素,而`insertAfter`函数负责将L1链表插入到L2链表中值为y之后。
阅读全文