首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C中的O(1)时间内合并两个链表?

在C语言中,要在O(1)时间内合并两个链表,可以使用指针操作来实现。以下是一种可能的实现方法:

  1. 首先,定义一个结构体来表示链表节点,包含一个数据字段和一个指向下一个节点的指针字段。
代码语言:c
复制
struct ListNode {
    int data;
    struct ListNode* next;
};
  1. 创建两个链表,并初始化它们的头节点指针。
代码语言:c
复制
struct ListNode* list1 = NULL;
struct ListNode* list2 = NULL;
  1. 在链表1的末尾添加节点。
代码语言:c
复制
void append(struct ListNode** head, int data) {
    struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
    newNode->data = data;
    newNode->next = NULL;

    if (*head == NULL) {
        *head = newNode;
    } else {
        struct ListNode* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}
  1. 合并两个链表。
代码语言:c
复制
struct ListNode* mergeLists(struct ListNode* list1, struct ListNode* list2) {
    if (list1 == NULL) {
        return list2;
    }
    if (list2 == NULL) {
        return list1;
    }

    struct ListNode* mergedList = list1;
    while (list1->next != NULL) {
        list1 = list1->next;
    }
    list1->next = list2;

    return mergedList;
}
  1. 调用上述函数来合并两个链表。
代码语言:c
复制
append(&list1, 1);
append(&list1, 2);
append(&list1, 3);

append(&list2, 4);
append(&list2, 5);
append(&list2, 6);

struct ListNode* mergedList = mergeLists(list1, list2);

这样,两个链表就会被合并在一起,并且时间复杂度为O(1)。

请注意,以上代码仅为示例,实际应用中可能需要根据具体情况进行适当的修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券