轻语远歌 发表于 2024-9-30 14:52:57

1.有两个有序链表A和B,A中存放的是1,3,5,7,9。B中存放的是2,4,6,8,10. 要求将两个...

1.有两个有序链表A和B,A中存放的是1,3,5,7,9。B中存放的是2,4,6,8,10.
要求将两个有序链表合成一个有序链表1,2,3,4,5,6,7,8,9,10,用c语言写代码实现。

FishC 发表于 2024-9-30 14:53:12

可以使用归并的思想来合并两个有序链表。以下是C语言实现:

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
struct ListNode {
    int val;
    struct ListNode* next;
};

// 创建新节点
struct ListNode* createNode(int val) {
    struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 合并两个有序链表
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if (l1 == NULL) return l2;
    if (l2 == NULL) return l1;

    struct ListNode dummy; // 临时节点,便于拼接链表
    struct ListNode* tail = &dummy; // 合并后的链表尾指针

    // 合并操作
    while (l1 != NULL && l2 != NULL) {
      if (l1->val < l2->val) {
            tail->next = l1;
            l1 = l1->next;
      } else {
            tail->next = l2;
            l2 = l2->next;
      }
      tail = tail->next;
    }

    // 连接剩余部分
    tail->next = (l1 != NULL) ? l1 : l2;

    return dummy.next;
}

// 打印链表
void printList(struct ListNode* head) {
    while (head != NULL) {
      printf("%d ", head->val);
      head = head->next;
    }
    printf("\n");
}

int main() {
    // 创建链表A: 1 -> 3 -> 5 -> 7 -> 9
    struct ListNode* A = createNode(1);
    A->next = createNode(3);
    A->next->next = createNode(5);
    A->next->next->next = createNode(7);
    A->next->next->next->next = createNode(9);

    // 创建链表B: 2 -> 4 -> 6 -> 8 -> 10
    struct ListNode* B = createNode(2);
    B->next = createNode(4);
    B->next->next = createNode(6);
    B->next->next->next = createNode(8);
    B->next->next->next->next = createNode(10);

    // 合并链表
    struct ListNode* mergedList = mergeTwoLists(A, B);

    // 打印合并后的链表
    printList(mergedList);

    // 释放内存
    while (mergedList != NULL) {
      struct ListNode* temp = mergedList;
      mergedList = mergedList->next;
      free(temp);
    }

    return 0;
}

这个代码首先定义了链表节点的结构体,并提供了创建新节点和打印链表的函数。合并两个有序链表的核心函数是 `mergeTwoLists`,使用归并的思想遍历两个链表并合并成一个新的有序链表。最后,在主函数中演示了如何创建两个示例链表并进行合并和打印。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 1.有两个有序链表A和B,A中存放的是1,3,5,7,9。B中存放的是2,4,6,8,10. 要求将两个...