用C语言编写程序,从键盘输入元素,将单链表A分解为两个单链表A和B,其头指针分别为head和head1,使新的A链表喊原链表中序号为奇数的元素,二B链表含有原链表A中序号为偶数的元素,且保持原来相对顺序
时间: 2024-03-27 13:07:29 浏览: 71
单链表的删除和逆置.zip
你可以使用以下的C语言代码来实现将单链表A分解为两个链表A和B,其中A链表包含原链表中序号为奇数的元素,B链表包含原链表中序号为偶数的元素,并且保持原来的相对顺序。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点
struct Node {
int data;
struct Node* next;
};
// 分解链表函数
void splitLinkedList(struct Node* head, struct Node** head1, struct Node** head2) {
struct Node* temp1 = head;
struct Node* temp2 = head->next;
*head1 = temp1;
*head2 = temp2;
while (temp1 != NULL && temp2 != NULL) {
temp1->next = temp2->next;
if (temp1->next != NULL) {
temp1 = temp1->next;
temp2->next = temp1->next;
temp2 = temp2->next;
}
}
temp1->next = NULL;
}
// 打印链表函数
void printLinkedList(struct Node* head) {
struct Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
// 主函数
int main() {
struct Node* head = NULL;
struct Node* newNode = NULL;
struct Node* temp = NULL;
int n;
// 输入链表元素个数
printf("请输入链表元素个数:");
scanf("%d", &n);
// 输入链表元素
for (int i = 0; i < n; i++) {
newNode = (struct Node*)malloc(sizeof(struct Node));
printf("请输入第 %d 个元素:", i+1);
scanf("%d", &newNode->data);
newNode->next = NULL;
if (head == NULL) {
head = newNode;
temp = newNode;
} else {
temp->next = newNode;
temp = newNode;
}
}
struct Node* head1 = NULL;
struct Node* head2 = NULL;
// 分解链表
splitLinkedList(head, &head1, &head2);
// 打印A链表
printf("A链表元素为:");
printLinkedList(head1);
// 打印B链表
printf("B链表元素为:");
printLinkedList(head2);
return 0;
}
```
你可以按照提示输入链表的元素个数和每个元素的值,然后程序会将链表分解为A链表和B链表,并分别打印它们的元素。注意,这里假设链表的序号从1开始计算。
阅读全文