鱼C论坛

 找回密码
 立即注册
查看: 301|回复: 1

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

[复制链接]
发表于 2024-9-30 14:52:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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语言写代码实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-31 02:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表