【链表】数据查找和合并

 获取链表中间位置的数据

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

/* 定义链表的结构体 */
struct Node
{
    int data;
    struct Node *next;
};

/* 获取链表中处于中间位置的元素并打印出来*/
void printMiddle(struct Node *head)
{
    struct Node *slow_ptr = head;
    struct Node *fast_ptr = head;

    if (head != NULL)
    {
        while (fast_ptr != NULL && fast_ptr->next != NULL)
        {
            fast_ptr = fast_ptr->next->next;
            slow_ptr = slow_ptr->next;
        }
        printf("The middle element is [%d]\n\n", slow_ptr->data);
    }
}

void push(struct Node **head_ref, int new_data)
{
    /* 分配新节点 */
    struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));

    /* 加入新的数据 */
    new_node->data = new_data;

    /* 将新节点加入原来的链表中 */
    new_node->next = (*head_ref);

    /* 将链表头指向新节点 */
    (*head_ref) = new_node;
}

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


int main()
{
    struct Node *head = NULL;
    int i;

    for (i = 5; i > 0; i--)
    {
        push(&head, i);
        printList(head);
        printMiddle(head);
    }

    return 0;
}

运行结果:

 

合并两个链表

将两个单独的链表合并成一个链表

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

struct node *head1 = NULL;
struct node *head2 = NULL;

/* 合并链表的算法 */

void merge()
{
    struct node *temp1 = head1;
    struct node *temp2 = head2;

    /* 两个临时变量存储两个待操作链表的下一个节点 */
    struct node *holder1 = NULL;
    struct node *holder2 = NULL;

    while (temp1 != NULL && temp2 != NULL)
    {
        holder1 = temp1->next; //存储第一个链表的下一个节点
        temp1->next = temp2; //第一个链表的第一个节点指向第二个链表的第一个节点

        if (holder1 != NULL)
        {
            /* 第二个链表的第一个节点指向第一个链表的第二个节点 */
            holder2 = temp2->next;
            temp2->next = holder1;
        }
        
        /* 更新两个变量temp1和temp2的位置 */
        temp1 = holder1;
        temp2 = holder2;
    }
}

void printlist(struct node *temp)
{
    printf("%d", temp->data);
    temp = temp->next;
    while (temp != NULL)
    {
        printf("->%d", temp->data);
        temp = temp->next;
    }
    printf("\n");
}

int main()
{
    // Linked List 1: 1->3->5->7   :   Linked List 2: 2->4->6
    /* 创建8个节点 */
    struct node *one = (struct node *)malloc(sizeof(struct node));
    struct node *two = (struct node *)malloc(sizeof(struct node));
    struct node *three = (struct node *)malloc(sizeof(struct node));
    struct node *four = (struct node *)malloc(sizeof(struct node));
    struct node *five = (struct node *)malloc(sizeof(struct node));
    struct node *six = (struct node *)malloc(sizeof(struct node));
    struct node *seven = (struct node *)malloc(sizeof(struct node));
    struct node *eight = (struct node *)malloc(sizeof(struct node));

    head1 = one; //head1指向第一个链表的第一个节点
    head2 = two; //head2指向第二个链表的第一个节点

    one->data = 1;
    one->next = three;

    two->data = 2;
    two->next = four;

    three->data = 3;
    three->next = five;

    four->data = 4;
    four->next = six;

    five->data = 5;
    five->next = seven;

    /* 第二个链表的最后一个节点 */
    six->data = 6;
    six->next = eight;

    /* 第一个链表的最后一个节点 */
    seven->data = 7;
    seven->next = NULL;
 
    eight->data = 8;
    eight->next = NULL;

    printf("Linked List 1: ");
    printlist(head1);
    printf("\nLinked List 2: ");
    printlist(head2);

    /* 合并两个链表成为一个链表 */
    merge();

    printf("\nMerged Linked List: ");
    printlist(head1);  //合并后的链表

    return 0;
}

运行结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/131469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

合并两个链表 --- 递归回溯算法练习二

目录 1. 分析题意 2. 分析算法原理 2.1. 递归思路&#xff1a; 1. 挖掘子问题&#xff1a; 3. 编写代码 3.1. step one 3.2. step two 3.3. step three 3.1. 递归写法 4. 补充 --- 迭代写法 5. 总结 1. 分析题意 力扣上原题链接如下&#xff1a; 21. 合并两个有序链表…

密码学 - RSA签名算法

实验九 RSA签名算法- 一、实验目的 通过实验掌握GMP开源软件的用法&#xff0c;理解RSA数字签名算法&#xff0c;学会RSA数字签名算法程序设计&#xff0c;提高一般数字签名算法的设计能力。 二、实验要求 (1)基于GMP开源软件&#xff0c;实现RSA签名算法。 (2)要求有对应…

【LeetCode笔试题】88.合并两个有序数组

问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合…

关灯游戏及扩展

7.8 图形界面应用案例——关灯游戏 题目&#xff1a; [案例]游戏初步——关灯游戏。 关灯游戏是很有意思的益智游戏&#xff0c;玩家通过单击关掉(或打开)一盏灯。如果关(掉&#xff08;或打开)一个电灯&#xff0c;其周围(上下左右)的电灯也会触及开关&#xff0c;成…

spring boot configuration annotation processor notconfigured解决方法

spring boot configuration annotation processor notconfigured解决方法 一、问题描述二、解决方法 一、问题描述 我在使用ConfigurationProperties注解的时候idea出现提示信息spring boot configuration annotation processor notconfigured&#xff0c;但是却不影响程序的运…

22款奔驰S400L升级原厂360全景影像 打破死角

本次星骏汇小许介绍的是22款奔驰S400L升级原厂360全景影像&#xff0c;上帝视角看清车辆周围环境&#xff0c;更轻松驾驶 升级360全景影像系统共有前后左右4个摄像头&#xff0c;分别在车头&#xff0c;车尾&#xff0c;以及两边反光镜下各一个&#xff0c;分别用来采集车头&a…

Springboot+vue的企业资产管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的企业资产管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业资产管理系统&#xff0c;采用M&#xff08;model&a…

如何更好的使用Copilot

Copilot从诞生到现在过去了挺长时间了&#xff0c;大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇&#xff0c;可以对自己的工作大大提效&#xff1b;有些觉得也就那样&#xff0c;为什么要花那么多钱做这个事情&#xff0c;钱它不香吗&#xff1f; 从最开始…

地推网推必备app拉新平台 又升级啦 一手官签渠道

今天地推网推必备app拉新平台 ”聚量推客“ 又升级啦 一手邀请码 000000 今天升级了什么呢&#xff1f; 针对地推和网推作业人员升级了团队管理和做单excel导出功能&#xff0c;更好得查看自己和团队的作业情况&#xff0c;这个功能是地推和网推的一个必备功能

CodeWhisperer 史上最强大的 AI 编程助手!!

最近用了一个叫 CodeWhisperer 的插件&#xff0c;这个软件对于来说开发人员&#xff0c;插件有好多实用的功能&#xff0c;能有效减少我们的重复性工作&#xff0c;让编码更高效&#xff0c;代码质量也提升了很多。 CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于…

uniapp中在组件中使用被遮挡或层级显示问题

uniapp中在组件中使用或croll-view标签内使用uni-popup在真机环境下会被scroll-view兄弟元素遮挡&#xff0c;在开发环境下和安卓系统中可以正常显示&#xff0c;但在ios中出现了问题 看了许多文章都没有找到问题的原因&#xff0c;最后看到这一个文章http://t.csdnimg.cn/pvQ…

Clickhouse学习笔记(4)—— Clickhouse SQL

insert insert操作和mysql一致 标准语法&#xff1a;insert into [table_name] values(…),(….)从表到表的插入&#xff1a;insert into [table_name] select a,b,c from [table_name_2] update 和 delete ClickHouse 提供了 Delete 和 Update 的能力&#xff0c;这类操作…

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器&#xff08;2022.1 更新&#xff09; 简介 在先前的 AI 引擎系列博文中&#xff0c;我们以 x86 模型为目标运行了 AI 引擎编译器&#xff0c;并运行了 X86 仿真器来验证 AI 引擎应用的功能模型。在本文中&#xff0c;…

嵌入式CTS测试

1.概述 CTS是一套开源测试套件&#xff0c;可以实现对OpenGL、ES、OpenCL、Vulkan的兼容性测试。OpenGL ES CTS的测试集&#xff0c;其测试用例涵盖了各种OpenGL ES 的功能和特性。这些功能包括着色器编译和链接、图元绘制、纹理操作、帧缓冲操作、深度测试、模板测试以及其他一…

直播间自动发言机器人的运行分享,与开发需要到的技术分析

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着人工智能技术的不断发展&#xff0c;自动发言机器人已经成为了当今社交媒体领域的重要组成部分。它们能够自动化地发布内容、回复用户评论和消息&#xff0c;大大提高…

【Linux】--进程信号

信号 1.信号入门 程序员设计进程的时候&#xff0c;早就已经设计了对信号的识别能力&#xff01;&#xff01;&#xff01;&#xff01;进程在没有收到信号的时候&#xff0c;其实它早就已经知道一个信号该怎么处理了&#xff01;因为信号可能随时会产生&#xff0c;所有在信…

类与对象(2)

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月11日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

牛客、赛码网OJ调试(全)

现在无论开发还是测试&#xff0c;面试的时候都需要考察代码能力。 从测试的职业发展来看&#xff0c;现在市场上对于纯功能测试的需求很少&#xff0c;招聘方均要求面试者一方面具备测试基础能力&#xff0c;也要求有点代码能力。 对于测试来说&#xff0c;除了测试开发&#…

程序员的那些坏习惯!来看看你有几个?

一、前言 写了20多年代码&#xff0c;我见过不下于4位数的程序员&#xff0c;我觉得程序员的能力水平可以分为4个阶段&#xff1a;线性级、逻辑级、架构级和工程级。 同样的在这些人当中&#xff0c;我也发现了8个程序员最常见的陋习&#xff0c;基本上可以覆盖90%的人&#…

自动驾驶算法(十):多项式轨迹与Minimun Snap闭式求解原理及代码讲解

目录 1 多项式轨迹与Minimun Snap闭式求解原理 2 代码解析 1 多项式轨迹与Minimun Snap闭式求解原理 我们上次说的Minimun Snap&#xff0c;其实我们就在求一个二次函数的最优解&#xff1a; 也就是优化函数在约束下的最小值。 但这是一个渐进最优解而不是解析最优解&#xf…