C语言实现输出链表中倒数第k个节点

C语言实现输出链表中倒数第k个节点

题目描述

给定一个链表,要求实现一个函数输出该链表中倒数第k个节点。

解题思路

这道题可以通过两个指针来解决:一个指针先走k-1步,然后两个指针一起走,直到先走的指针到达链表的末尾。此时,后一个指针指向的就是链表中倒数第k个节点。

具体实现过程如下:

  1. 定义两个指针 p1p2,同时指向链表的头结点。
  2. p1 指针先走 k-1 步,即向后移动 k-1 个节点 。
  3. 接着,让 p1p2 两个指针同时向后移动,直到 p1 指向链表的尾节点为止。
  4. 此时, p2 指向的节点就是链表中倒数第k个节点。

代码实现

下面是完整代码实现:

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

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

struct ListNode* getKthFromEnd(struct ListNode* head, int k){
    if (!head) return NULL;

    struct ListNode *p1 = head, *p2 = head;

    // 让p1指针先走k-1步
    for (int i = 0; i < k - 1; i++) {
        if (p1) p1 = p1->next;
        else return NULL;
    }

    // 同时移动p1和p2指针
    while (p1->next) {
        p1 = p1->next;
        p2 = p2->next;
    }

    return p2;
}

int main() {
    // 创建一个链表
    struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->val = 1;
    head->next = NULL;

    struct ListNode *p = head;

    for (int i = 2; i <= 5; i++) {
        struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
        node->val = i;
        node->next = NULL;
        p->next = node;
        p = p->next;
    }

    // 测试输出倒数第3个节点
    struct ListNode *res = getKthFromEnd(head, 3);

    if (res) printf("%d",res->val);

    return 0;
}

示例说明

我们将上述代码放入到C语言编译器(例如Dev-C++)中进行编译运行,得到输出结果为3。

再举一个实际一点的例子:比如我们有一条链表 1->2->3->4->5,想要输出倒数第2个节点,那么我们调用函数 getKthFromEnd(head, 2),输出结果为4。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现输出链表中倒数第k个节点 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Fragment配合RadioGroup实现点击切换布局

    在Android开发中,我们经常需要实现点击切换布局的功能。其中,Fragment和RadioGroup是两个常用的组件。本文将介绍如何使用Fragment和RadioGroup实现点击切换布局的完整攻略,包括创建Fragment、使用RadioGroup监听点击事件、切换Fragment等内容,并提供两个示例说明。 1. 创建Fragment 在使用Fra…

    other 2023年5月5日
    00
  • “劲舞团服务器端”配置文件分析

    配置文件分析的目的和意义 在劲舞团游戏中,服务器端的配置文件被用来控制游戏的各种功能和参数。因此,对配置文件进行分析,可以帮助管理员和开发人员理解游戏的内部结构和原理,进而做出相应的优化和改进。 配置文件格式简介 劲舞团服务器端配置文件采用了INI格式,其中每个节(section)表示一个模块,每个键值对(key-value pair)表示一个参数和其对应的…

    other 2023年6月27日
    00
  • 基于redis.properties文件的配置及说明介绍

    基于redis.properties文件的配置及说明介绍 在使用Redis时,我们需要对其进行配置,而对Redis进行配置的常用方式是通过配置文件,其中较为常用的配置文件是redis.properties文件。这里,我们将详细讲解如何对Redis进行配置,以此来为大家提供一个使用Redis的完整攻略。 1. 配置文件的读取 当我们使用Redis时,需要将Re…

    other 2023年6月25日
    00
  • logback日志打印sql

    以下是使用logback日志打印SQL的完整攻略,包含两个示例说明: 步骤1:添加logback依赖 首先,您需要在项目中添加logback依赖。您可以使用以下Maven依赖添加logback: <dependency> <groupId>ch.qos.logback</groupId> <artifactId&gt…

    other 2023年5月6日
    00
  • php 字符串函数收集

    为了更好地让读者了解 “PHP 字符串函数收集”,我将分享以下攻略。 什么是 PHP 字符串函数? PHP 字符串函数是一组内置函数,可以帮助你操作和处理字符串数据。PHP 字符串函数提供了许多的函数,包括字符串的分割、替换、截取等。 如何学习 PHP 字符串函数? 1.官方文档 PHP 官方文档是一个全面的资源,它让你获得详细的解释,包括每个函数的用途、语…

    other 2023年6月20日
    00
  • u盘安装centos的方法

    以下是关于“U盘安装CentOS的方法”的完整攻略,包括准备工作、制作启动盘、安装CentOS和两个示例。 准备工作 在制作U盘启动盘之前,需要准备以下材料: 一台电脑:用于制作U盘启动盘和安装CentOS。 一个U盘:容量不小于4GB。 CentOS镜像文件:可以从CentOS官网下载。 制作启动盘 以下是制作U盘启动盘的步骤: 下载并安装Etcher:E…

    other 2023年5月7日
    00
  • Windows Server 2012搭建FTP站点详细教程(阿里云)

    Windows Server 2012搭建FTP站点详细教程(阿里云) 1. 安装IIS和FTP服务 在Windows Server 2012中安装IIS和FTP服务的方法如下: 单击服务器管理器中的“管理”菜单,然后单击“添加角色和功能”。 在“添加角色和功能向导”中单击“下一步”,然后选择“安装基于角色或基于功能的安装”。 在“服务器角色”窗口中,选中“…

    other 2023年6月27日
    00
  • CentOS中网络配置相关文件配置选项说明

    下面是”CentOS中网络配置相关文件配置选项说明”的完整攻略。 网络配置相关文件 在 CentOS 中,和网络相关的配置文件主要有以下几个: /etc/sysconfig/network-scripts/ifcfg-<网卡名称>:每个网卡对应一个配置文件。 /etc/sysconfig/network:配置主机名及网关等全局网络参数。 /etc…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部