C语言/数据结构——(返回到数第K个节点)

一.前言

嗨嗨嗨,大家我们又见面了。今天我们来分享一道链表题------返回到数第K个节点。

题目链接https://leetcode.cn/problems/kth-node-from-end-of-list-lcci废话不多说,让我们直接开始吧。

二.正文

1.1题目描述

这是在力扣上的一道题。

1.2题目分析

对于这道题,我的想法是可以通过将链表先进行反转,然后直接通过找到目标数据。就比如,文中所给示例:

1->2->3->4->5和K=2

先反转:5->4->3->2->1,此时K=2,就是第二个数据为4的节点。

既然理论成立我们就可以着手写代码了。首先我们面临着第一个问题,如何将链表反转呢?

(i)不建立哨兵位

这个是我之前写的一个对于反转链表的博客链接https://blog.csdn.net/yiqingaa/article/details/138376042?有兴趣的小伙伴可以看一下。

(ii)建立哨兵位求解

我们可以创建一个哨兵位,即一个真实存在,但并没有初始化的节点(这个节点是通过malloc函数申请的,后面我们需要手动删除)

上面两种方式都可行,这里我采用的是第二种方式。

1.3代码实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k)
{
// if(head==NULL)
  //  return NULL;
    ListNode*pcur,*prev,*pnext;
    ListNode* phead=(ListNode*)malloc(sizeof(ListNode));
    phead->next=head;
    pcur=head;prev=phead;pnext=pcur->next;
    while(pcur!=NULL)
    {
        pcur->next=prev;
        prev=pcur;
        pcur=pnext;
        if(pnext!=NULL)
        pnext=pnext->next;
    }
    head->next=NULL;
    free(phead);
    phead=NULL;
    while(--k)
    {
prev=prev->next;
    }
    return prev->val;
}

值得注意的是,以上代码是在力扣环境条件下运行的代码。

三.结言

今天的题目分享就到此结束了,拜拜。

相关推荐
ly76891 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
Navigator_Z1 小时前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
落魄大学生之流水线上谋生计1 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
for_ever_love__1 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
ly76891 小时前
Python 全面入门:从核心语法到工程实践
开发语言·python
艾伦_耶格宇3 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
旋生万物3 小时前
【终极实战】用Python从零“生成“一个宇宙:螺旋干涉模型的代码实现
开发语言·前端·人工智能·react.js·php·wpf
土司大王4 小时前
LeetCode hot100——合并两个有序链表
算法·leetcode·链表
码行山野赴时序归途4 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
16月6日-晴4 小时前
Java面向对象进阶—多态
java·开发语言