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

链表算法题一

旋转链表

旋转链表

在这里插入图片描述

首先考虑特殊情况

  1. 若给定链表为空表或者单个节点,则直接返回head,不需要旋转操作.
  2. 题目给定条件范围: 0 < = k < = 2 ∗ 1 0 9 0 <= k <= 2 * 10^9 0<=k<=2109,但是受给定链表长度的限制,比如示例2中,k=4与k=1的效果等价.
    那么可以得出k=k%len的式子,其中len为数组长度.
  3. 先遍历原链表,求得len.
  4. 求得新链表的头节点,尾节点在原链表中位置,修改指针指向即可.
class Solution {public ListNode rotateRight(ListNode head, int k) {if(head==null||head.next==null) return head;int len = 0;//遍历求链表长度并且求出原链表的末尾节点.ListNode tail = head;while(tail.next!=null){tail = tail.next;len++;}len++;//处理kk = k % len;if(k==0) return head;//找新链表的尾节点.int n = len-k-1;ListNode cur = head;while(n>0){cur = cur.next;n--;}tail.next = head;//找到新链表的头节点,其后修改指针指向即可.head = cur.next;cur.next = null;return head;}
}

合并K个链表

在这里插入图片描述
分治思想+归并排序

注意此题与数组的归并排序区别.
分治部分和数组相同,但合并部分merge函数实际是此题:合并两个有序链表.
如果了解归并排序和做个上面那道题,思路一通水到渠成.
结论:链表的归并排序空间复杂度: O ( 1 ) O(1) O(1)

class Solution {private ListNode mergeListSort(ListNode[] lists,int start,int end){if(start>end)return null;if(start==end)return lists[start];int mid = start + (end-start)/2;ListNode left = mergeListSort(lists,start,mid);ListNode right = mergeListSort(lists,mid+1,end);return merge(left,right);}private ListNode merge(ListNode left,ListNode right){if(left==null)return right;if(right==null)return left;ListNode cur1 = left,cur2 = right;ListNode head = new ListNode();ListNode tail = head;while(cur1!=null&&cur2!=null){if(cur1.val<=cur2.val){tail.next = cur1;cur1 = cur1.next;tail = tail.next;}else{tail.next = cur2;cur2 = cur2.next;tail = tail.next;}}if(cur1!=null)tail.next=cur1;if(cur2!=null)tail.next=cur2;return head.next;} public ListNode mergeKLists(ListNode[] lists) {if(lists==null||lists.length==0)return null;//MergeSort启动!return mergeListSort(lists,0,lists.length-1);//当lists.length==1时,上式会返回lists.}
}

​力扣只写了两道题的笔记,太累了写不动ε(┬┬﹏┬┬)3.
力扣折磨.

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

相关文章:

  • Unity(2022.3.38LTS) - 基础概念
  • 无人机之飞手必看篇
  • 数据结构(11)——二叉搜索树
  • 如何使用和配置 AWS CLI 环境变量?
  • 七、流程控制
  • 【通过python启动指定的文件】
  • 区块链开源的项目有哪些?
  • 3152. 特殊数组 II(24.8.14)
  • Android 全系统版本文件读写最佳适配,CV 即用(适配到 Android 14)
  • 【日记】朋友和他女朋友领证了(368 字)
  • 行业大模型:信用评分大模型、生产优化大模型、库存管理大模型、物流行业大模型、零售行业大模型
  • VSCode 搭配 Windows 下各种 C/C++ 编译器使用
  • 【JavaEE】线程池和定时器
  • 《Unity3D网络游戏实战》通用服务器框架
  • LeetCode404 左叶子之和
  • nodejs操作redis的工具类
  • 关于wsl2与win11互联互通的问题
  • C++ 类型转换
  • 2024挖漏洞给报酬的网站汇总,兼职副业3天收益2k
  • 0到1学习Google广告(2):掌握展示位置及排名规则丨出海笔记
  • MySQL数据库读超时/SELECT查询超时 杂记
  • docker数据卷:
  • 【linux】linux中如何通过systemctl来创建和管理服务
  • WPF-实现多语言的静态(需重启)与动态切换(不用重启)
  • UE5学习笔记12-为角色添加蹲下的动作
  • 【笔记】Android 多用户模式和用户类型
  • SQL基础——MySQL的索引
  • 【开发语言】面向对象和面向过程开发思路的区别
  • 谷歌账号登录的时候提示被停用,原因是什么,账号还有救吗?该如何处理?
  • 数据库复习笔记