这是一个目录

  • 链表中倒数第k个节点
    • 解法一
    • 解法二
  • 链表的回文结构
    • 思路
    • 代码
  • 链表分割
    • 思路
    • 代码
  • 最后

菜鸡大学生的数据结构——刷题篇3

我们的第三题小宝贝儿回归了!

菜鸡大学生明白,笔试oj题目还是以牛客网为主的,于是下定决心,准备离开力扣,去牛客网进行一番打拼。不幸的是,写又写不过,蒙又蒙不着,远程全面闪避,近身降维打击,被人类的智慧之光段错误轰炸的两面焦香。遂,润。

“刷题不慎以命填呐——” ——来自某崩溃菜鸡大学生。

链表刷题已经过半了,不出意外的话这个是倒数第二篇,再写一篇之后我们就可以写双链表了。


链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个结点。
示例:

输入: 1,{1,2,3,4,5}
返回值: {5}

解法一

这一道题,最简单的方法就是求出链表的长度,然后减去k的值。
但是要两次遍历链表,有没有遍历一次链表的方法呢?

解法二

有,快慢指针。
快指针先走k步,走完之后快慢指针一起走。当快指针遍历结束的时候慢指针正好指向链表倒数第k个节点

以链表倒数第二个节点为例。

class Solution {public:ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {struct ListNode* fast=pListHead;struct ListNode* slow=pListHead;while(k--){if(fast==NULL)return NULL;fast=fast->next;}while(fast){fast=fast->next;slow=slow->next;}return slow;}
};

(虽然是c++但是c也是兼容的)


链表的回文结构

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:

1->2->2->1
返回:true

思路

  1. 先用快慢指针找到链表的中间节点:
  2. 头插把链表分成两个链表:
  3. 遍历检查两个链表是否相等 (注:上链表的2节点依旧指向下链表的3节点,但是通过图像可以发现对结果没有影响)

代码

class PalindromeList {public:bool chkPalindrome(ListNode* A) {struct ListNode* slow = A;struct ListNode* fast = A;struct ListNode* newhead = NULL;while (fast && fast->next){fast = fast->next->next;slow = slow->next;}//寻找中间节点struct ListNode* head1 = slow;while (head1){struct ListNode* next = head1->next;head1->next = newhead;newhead = head1;head1 = next;}//链表分割while (A && newhead){if (A->val != newhead->val){return false;}else{A = A->next;newhead = newhead->next;}}//检查链表是否相等return true;}
};

链表分割

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

思路

这玩意啊,不简单啊,不简单。

菜鸡大学生本来想康康用例,或者康康图,结果发现一个都没有。那该怎么办呢,只能自己想象了。

菜鸡大学生是一个极端的人,想了很多极端情况:

  1. 所有值比x小。
  2. 所有值比x大。
  3. 最后一个是比x小。
  4. 最后一个是比x大。

那该怎么解决呢?

我们可以把这个链表小于x的节点和大于等于x的节点分开,分别形成两个链表,然后再连接
我们这里使用带哨兵位的头节点。

以x=2为例。

注:将Ghead链最后节点置空,因为3节点依旧指向1节点,不置空的话就会形成环形链表

代码

class Partition {public:ListNode* partition(ListNode* pHead, int x) {ListNode* SHead,*STail,* GHead,* GTail;SHead=STail=(ListNode*)malloc(sizeof(ListNode));GHead=GTail=(ListNode*)malloc(sizeof(ListNode));STail->next=GTail->next=NULL;ListNode* cur=pHead;while(cur){if(cur->val<x){STail->next=cur;STail=STail->next;}else{GTail->next=cur;GTail=GTail->next;}cur=cur->next;}//拆分成两条链表STail->next=GHead->next;//链接俩链表GTail->next=NULL;ListNode* ret=SHead->next;free(SHead);free(GHead);return ret;}
};

最后

不是不报,时候未到,终有一日,被它锤爆。

我可怜的菜鸡大学生。

[数据结构]题海啊,全是水(三)链表中倒数第k个节点、链表的回文结构、链表分割相关推荐

  1. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  2. python 链表中倒数第k个节点

    | 返回链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值 ...

  3. python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点

    题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...

  4. 剑指offer:面试题22. 链表中倒数第k个节点

    题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...

  5. 链表中倒数第k个节点

    链表中倒数第k个节点 [题目]: 输入一个链表,输出该链表中倒数第k个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6.这个链表的倒数第 3 个节点是值为 4 ...

  6. 链表中倒数第k个节点 1

    题意: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...

  7. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  8. LeetCode-剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 思路一:利用快慢双指针 /*** Definition for singly-linked list.* struct ListNode {* int ...

  9. 《漫画算法2》源码整理-8 链表中倒数第K个节点元素

    链表中倒数第K个节点元素 public class KthFromEnd {public static Node findKthFromEnd(Node head, int k){Node p1 = ...

最新文章

  1. Android实现程序前后台切换效果
  2. 研究能力培养的阶梯: 盐趣一对一科研项目
  3. 嵌入式编程C语言提高代码效率的14种方法
  4. 初次运行git前的配置
  5. JBoss Fuse 6.2发布–指导如何快速尝试
  6. qchart折现图_Qt开发技术:QCharts(二)QCharts折线图介绍、Demo以及代码详解
  7. 使用sqlite3创建数据库表的时候须要注意
  8. python定义_python __xx__的定义和用处
  9. linux lamp实验报告,新手学Linux--构建lamp
  10. 科技范足 多家上市川企获省科技进步奖
  11. linux 安装scons
  12. DELL Power Edge 1950 系统硬件用户手册
  13. adb 静默安装_GitHub - anricheng/jing_install: 静默安装与卸载
  14. union myun { struct{ int x; int y; int z; }u; int k; }a;
  15. Android7.0以上多系统语言的国际化适配
  16. c语言windows画五角星,C/C++画一个巨型五角星
  17. 什么样的自学Java网站才适合学习者?
  18. 【计算机组成原理】计算机组成原理——组成篇
  19. Java选择题(十八)
  20. http协议服务器ppt,传智播客内部资料HTTP协议.ppt

热门文章

  1. Java、Stock类
  2. RPC框架和HTTP框架的区别
  3. 习惯一:积极主动--个人愿景的原则
  4. Linux开启端口供外部访问
  5. 【一级考试专题-4】游泳池蓄水
  6. 第十一届蓝桥杯大赛(2020年)软件类省赛第二场 Python大学组 真题+个人解答
  7. 白嫖github的Action做定时任务
  8. C语言文件操作,增删改查
  9. css样式-div居中
  10. 阿里巴巴Java开发手册编程规约