在C语言中,要在O(1)时间内合并两个链表,可以使用指针操作来实现。以下是一种可能的实现方法:
struct ListNode {
int data;
struct ListNode* next;
};
struct ListNode* list1 = NULL;
struct ListNode* list2 = NULL;
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;
}
}
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;
}
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)。
请注意,以上代码仅为示例,实际应用中可能需要根据具体情况进行适当的修改和优化。
领取专属 10元无门槛券
手把手带您无忧上云