`
zy3381
  • 浏览: 157629 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

合并两个有序链表

 
阅读更多
两个已经按照从小到大的排序的链表,合并成一个链表,仍然保持从小到大排序(貌似是归并排序里的基本操作)

#include<stdio.h>
struct Node
{
    int data;
    struct Node *next;
};

//创建链表
struct Node *create(int n,int count)
{
    int i;
    struct Node *head,*p1,*p2;
    head = p1 = p2 = (struct Node*)malloc(sizeof(struct Node));
    head->data = 2-n;
    for(i=1; i<count; i++)
    {
        p1 = (struct Node*)malloc(sizeof(struct Node));
        p1->data = 2*i+n;
        p2->next = p1;
        p2 = p1;
    }
    p2->next = NULL;
    return head;
}

//合并链表
struct Node *merge(struct Node *p1, struct Node *p2)
{
    struct Node *p,*head;

    //从两个链表中确定一个头节点
    if(p1->data < p2->data)
    {
        head = p = p1;
        p1 = p1->next;
    }
    else
    {
        head = p = p2;
        p2 = p2->next;
    }
    //合并后面的节点
    while(p1 != NULL && p2 != NULL)
    {
        if(p1->data < p2->data)
        {
            p->next = p1;
            p = p1;
            p1 = p1->next;
        }
        else
        {
            p->next = p2;
            p = p2;
            p2 = p2->next;
        }
    }
    //处理剩余的节点
    if(p1 != NULL)
    {
        p->next = p1;
    }
    else
    {
        p->next = p2;
    }

    return head;
}

void main()
{
    struct Node *p1,*p11,*p2,*p22,*p3;
    //创建链表
    p11 = p1 = create(1,5);
    p22 = p2 = create(0,3);

    printf("链表1初始数据:\n");
    while(p1)
    {
        printf("%d\n", p1->data);
        p1 = p1->next;
    }

    printf("\n链表2初始数据:\n");
    while(p2)
    {
        printf("%d\n", p2->data);
        p2 = p2->next;
    }

    printf("\n两个链表合并后的数据:\n");
    p3 = merge(p11,p22);
    while(p3)
    {
        printf("%d\n", p3->data);
        p3 = p3->next;
    }
}












分享到:
评论

相关推荐

    合并两个有序链表.zip

    两个有序链表的合并pta本文详细介绍了合并两个有序链表的算法原理、实现步骤、代码示例以及性能分析。通过掌握这一算法,我们可以更加高效地处理有序链表数据,提高程序的性能和可靠性。未来,随着数据规模的扩大和...

    PTA 两个有序链表序列的合并

    总结来说,"PTA 两个有序链表序列的合并"这个题目要求我们掌握链表的基本操作,理解链表的特性,以及如何有效地合并两个有序链表。通过解决这个问题,我们可以加深对链表数据结构的理解,同时锻炼我们的逻辑思维和...

    合并两个有序链表.pptx

    首先,我们可以看到PPT中的"合并两个有序链表"是通过创建一个虚拟头结点来实现的。虚拟头结点是一个不包含任何实际数据的特殊节点,它的主要作用是方便处理链表的合并过程。在这个例子中,`Assumehead`就是这个虚拟...

    php-leetcode题解之合并两个有序链表.zip

    在本压缩包“php-leetcode题解之合并两个有序链表.zip”中,主要涉及到的是一个编程问题,即如何用PHP解决LeetCode上的经典问题——“合并两个有序链表”。LeetCode是一个广受欢迎的在线平台,它提供了各种算法题目...

    合并K个升序链表(以合并两个有序链表为基础)1

    这个问题可以通过递归或迭代的方法来解决,这里我们将重点讨论基于合并两个有序链表的解决方案。 首先,我们需要了解链表的基本结构。在 C++ 中,链表节点通常定义为一个结构体或类,包含一个整数值 `val` 代表节点...

    递归或迭代方法来合并两个有序链表.zip

    在编程领域,特别是数据结构和算法的学习中,"合并两个有序链表" 是一个常见的问题。这个主题涉及到链表操作,以及两种主要的解决问题的方法:递归和迭代。下面我们将详细探讨这两个方法。 首先,链表是一种数据...

    java-leetcode题解之第21题合并两个有序链表.zip

    标题中的"java-leetcode题解之第21题合并两个有序链表.zip"指的是一个Java编程语言实现的LeetCode算法题解,具体是第21题——“合并两个有序链表”。这道题目要求我们将两个已排序的链表合并为一个新的已排序链表并...

    c语言链表的基本操作之合并两个有序链表.zip

    合并两个有序链表的目的是创建一个新的链表,其中包含两个输入链表的所有元素,且新链表仍然保持排序顺序。例如,如果链表1为1-&gt;3-&gt;5,链表2为2-&gt;4-&gt;6,则合并后的链表应为1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;6。 以下是合并两个有序...

    C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现

    4. **合并两个有序链表**:`MergerLikNode` 函数实现了合并两个有序链表的功能。首先检查其中一个链表是否为空,如果是,则直接返回另一个链表。然后比较两个链表头节点的值,选择较小的节点作为新链表的头部,并...

    c++ 如何合并两个有序链表

    C++ 如何合并两个有序链表 C++ 是一种高效的编程语言,它广泛应用于操作系统、嵌入式系统、游戏开发等领域。在 C++ 中,链表是一种常用的数据结构,它可以用来存储和处理大量数据。在实际应用中,我们经常需要合并...

    21合并两个有序链表.zip

    21合并两个有序链表.zip

    合并两个有序链表.md

    合并两个有序链表.md

    C#-Leetcode编程题解之第21题合并两个有序链表.zip

    在本压缩包中,主题是"C#-LeetCode编程题解之第21题合并两个有序链表",这涉及到C#编程语言以及在LeetCode平台上解决算法问题的技巧。LeetCode是一个广受欢迎的在线平台,它提供了各种编程挑战,帮助开发者提升算法...

    合并两个有序链表(java代码).docx

    ### 合并两个有序链表(Java代码) #### 背景介绍 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。处理链表时,我们经常需要对它们进行排序、合并...

    c语言-c语言编程基础之leetcode题解第21题合并两个有序链表.zip

    在C语言编程中,解决LeetCode的第21题——“合并两个有序链表”是一项基本而重要的技能。这道题目旨在考察程序员对链表结构的理解以及如何在链表上执行高效的合并操作。在此,我们将深入探讨C语言中的链表概念、如何...

    c++-c++编程基础之leetcode题解第21题合并两个有序链表.zip

    第21题"合并两个有序链表"是其中一道经典的题目,它涉及到链表的操作,这对于理解和掌握C++中的链表非常重要。下面我们将详细探讨这个问题以及如何用C++解决它。 首先,我们需要理解链表的概念。链表是一种线性数据...

    python-leetcode题解之第021合并两个有序链表

    python python_leetcode题解之第021合并两个有序链表

    算法讲解010【入门】链表入门题目-合并两个有序链表.pptx

    算法讲解010【入门】链表入门题目-合并两个有序链表

    两个有序链表的合并代码

    **合并两个有序链表**意味着将两个已排序的链表合并成一个新的、同样有序的链表。 #### 代码解析 接下来,我们将逐行解析给定的C语言代码,并解释其工作原理。 1. **宏定义与头文件包含** ```c #define NULL 0 ...

Global site tag (gtag.js) - Google Analytics