下面是一种实现从表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。

C语言实现单链表删除并插入操作

原文地址: https://www.cveoy.top/t/topic/ph6I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录