当前位置: 首页 > news >正文

链表OJ题(上)

✅每日一练:876. 链表的中间结点 - 力扣(LeetCode)


 解题思路:

    定义快慢指针,让快指针走2步,慢指针走1步,当fast或者fast.next为空时,走完链表,此时slow就是中间位置
public ListNode middleNode(ListNode head) {//定义快慢指针,让快指针走2步,慢指针走1步,当fast或者fast.next为空时,走完链表,此时slow就是中间位置ListNode fast = head;ListNode slow = head;while(fast != null && fast.next != null){fast = fast.next.next;slow = slow.next;}return slow;}

✅每日一练:203. 移除链表元素 - 力扣(LeetCode)


 

 解题思路:

   题目意思让我们删除链表中相同的元素,看图

 

public ListNode removeElements(ListNode head, int val) {//判断头结点是否为空if (head == null) {return null;}//定义两个指针ListNode prev = head;ListNode cur = head.next;//循环条件while (cur != null) {if (cur.val == val) {prev.next = cur.next;cur = cur.next;} else {prev = cur;cur = cur.next;}}//如果第一个元素就是我们要删除的节点,直接让head = head.nextif (head.val == val) {head = head.next;}return head;}

✅每日一练:206. 反转链表 - 力扣(LeetCode)

 

解题思路:

   题目意思很简单 ,就是逆序一个单链表,思路就是先把头结点置空,然后将后面的节点挨个进行头插,反转链表,逻辑看似简单,实现起来还是有很多细节的,常看,不然就会忘,如图

这里面还有细节,就是头结点为空时,说明没有节点,如果head.next = null,说明就一个节点,直接返回头结点就可:

public ListNode reverseList(ListNode head) {if (head == null) {return null;}if (head.next == null) {return head;}ListNode cur = head.next;//将头结点置空,将后面的节点逐一进行头插head.next = null;while (cur != null) {ListNode curNext = cur.next;cur.next = head;head = cur;cur = curNext;}return head;}

✅每日一练:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)


 

 解题思路:

   定义快慢指针,让快指针先走k-1步,走完以后让快慢指针同时走一步,当快fast.next为空时,说明走完了,此时slow就是我们要找的元素,非常巧妙,是谁想到的,真是太强了,我画个图吧

 

public ListNode FindKthToTail(ListNode head, int k) {if (k <= 0 || head == null) {return null;}//定义快慢指针,让快指针走2步,慢指针走k-1步,再让slow和fast同时走一步,让fast.next为空时,//表示走完了,此时的慢指针就是倒数第k个节点的数值ListNode fast = head;ListNode slow = head;//fast走k-1步while (k - 1 != 0) {fast = fast.next;//当k的值大于链表的长度时,用于判断下一个fast是否为空if (fast == null) {return null;}k--;}while (fast.next != null) {fast = fast.next;slow = slow.next;}return slow;}

✅每日一练:21. 合并两个有序链表 - 力扣(LeetCode)


 

 解题思路:

    这题有点像合并两个有序数组,定义一个临时的头结点,将两个链表的头结点的值进行比较,哪个小作为头结点,然后交叉比较两个链表,比较值的大小,小的房前面,形成有序,大致思路就是这样:

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode newHead = new ListNode();ListNode tmp = newHead;while (list1 != null && list2 != null) {if (list1.val < list2.val) {tmp.next = list1;list1 = list1.next;tmp = tmp.next;} else {tmp.next = list2;list2 = list2.next;tmp = tmp.next;}}if (list1 != null) {tmp.next = list1;}if (list2 != null) {tmp.next = list2;}//返回新的头结点return newHead.next;}

http://www.lryc.cn/news/39076.html

相关文章:

  • 【题解】百度2021校招Web前端工程师笔试卷(第一批):单选题、多选题
  • 论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description
  • 游戏玩的多,陪玩你了解的多吗?用Python来采集陪玩数据,看看行情和美照
  • React框架创建项目详细流程-项目的基本配置-项目的代码规范
  • nnunet入门之一 (CT图像分割)
  • 从0到1_批量下载视频
  • CNCF x Alibaba云原生技术公开课 第十二章 可观测性:监控与日志
  • C语言宏定义几个问题
  • 王道计算机组成原理课代表 - 考研计算机 第二章 数据的表示和运算 究极精华总结笔记
  • springboot集成mahout实现简单基于协同过滤算法的文章推荐算法
  • 自动驾驶介绍系列 ———— 看门狗
  • 今天打开个税APP,我直接人麻了!
  • javascript进阶学习笔记(含AJAX)
  • 今年没有金三银四
  • NFS - Network FileSystem网络文件系统的实现原理
  • C#【汇总篇】语法糖汇总
  • 高完整性系统工程(一): Safety Engineering, HAZOP Fault Tree Analysis
  • VGG16分类模型的网页界面(Flask,keras)
  • 互联网摸鱼日报(2023-03-12)
  • SpringBoot异常处理?用这两个就够啦!
  • mysql-查询重复数据的条数-count
  • 【Java枚举类】使用enum关键词定义枚举类
  • 第十四届蓝桥杯三月真题刷题训练——第 8 天
  • 鼎阳SDS2074X Plus免费“升级”(破解)备忘录
  • 【C++】C++标准模板库STL (一) string类的使用详解
  • 如何用SpringBoot+Thymeleaf+Echart生成好看的柱状图,折线图,饼状图
  • LeetCode819. 最常见的单词(python)
  • 【深入理解C指针】经典笔试题——指针和数组
  • 雷达散射截面
  • 希腊棺材之谜——复盘