C语言实现单链表删除并插入操作
下面是一种实现从表la中删除自第i个元素起共len个元素,并将它们插入到表lb的第j个元素之后的算法的C语言代码:
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 从表la中删除自第i个元素起共len个元素,并将它们插入到表lb的第j个元素之后
void deleteAndInsert(Node** la, Node** lb, int i, int len, int j) {
if (i <= 0 || j <= 0) {
printf("Invalid position.\n");
return;
}
Node* p = *la;
Node* q = *lb;
// 找到第i-1个结点
int count = 0;
while (p && count < i - 1) {
p = p->next;
count++;
}
// 找到第j个结点
count = 0;
while (q && count < j) {
q = q->next;
count++;
}
// 删除自第i个元素起共len个元素
Node* temp = p->next;
p->next = temp->next;
int deleteCount = 1;
while (deleteCount < len) {
temp = temp->next;
deleteCount++;
}
temp->next = NULL;
// 将删除的元素插入到表lb的第j个元素之后
temp->next = q->next;
q->next = p->next;
p->next = NULL;
}
// 创建单链表
Node* createList(int arr[], int size) {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
Node* p = head;
for (int i = 0; i < size; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
return head;
}
// 打印单链表
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 创建表la和表lb
int arr1[] = {1, 2, 3, 4, 5};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
Node* la = createList(arr1, size1);
int arr2[] = {6, 7, 8};
int size2 = sizeof(arr2) / sizeof(arr2[0]);
Node* lb = createList(arr2, size2);
// 打印初始表la和表lb
printf("Init:\n");
printf("la: ");
printList(la);
printf("lb: ");
printList(lb);
// 删除表la中自第2个元素起共3个元素,并将它们插入到表lb的第2个元素之后
int i = 2;
int len = 3;
int j = 2;
deleteAndInsert(&la, &lb, i, len, j);
// 打印处理后的表la和表lb
printf("After delete and insert:\n");
printf("la: ");
printList(la);
printf("lb: ");
printList(lb);
return 0;
}
执行以上代码,输出结果为:
Init:
la: 1 2 3 4 5
lb: 6 7 8
After delete and insert:
la: 1 2 5
lb: 6 7 3 4
在此示例中,表la的第2个元素起共3个元素为2、3、4,将它们插入到表lb的第2个元素之后,得到的结果为6、7、3、4。
原文地址: https://www.cveoy.top/t/topic/ph6I 著作权归作者所有。请勿转载和采集!