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

力扣hot100做题整理(21-30)

文章目录

      • 1.搜索二维矩阵Ⅱ
      • 2.相交链表
      • 3.反转链表
      • 4.回文链表
      • 5.环形链表
      • 6.环形链表Ⅱ
      • 7.合并两个有序链表
      • 8.两数相加
      • 9.删除链表的倒数第n个节点
      • 10.两两交换链表中的节点

1.搜索二维矩阵Ⅱ

当前值大于目标值,列--,小于当前值行++

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = 0, n = matrix[0].length-1;while (m < matrix.length && n >= 0) {if (matrix[m][n] > target) {n--;} else if (matrix[m][n] < target) {m++;} else {return true;}}return false;}
}

2.相交链表

a+c+b = b+c+a。走相同的路程

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode list1 = headA;ListNode list2 = headB;while (list1 != list2) { // 无交点null == nulllist1 = list1 != null ? list1.next : headB;list2 = list2 != null ? list2.next : headA; }return list1;}
}

3.反转链表

注意:dummy必须是null,如果new的话默认一个元素为0

class Solution {public ListNode reverseList(ListNode head) {ListNode dummy = null;while (head != null) {ListNode temp = head.next;head.next = dummy;dummy = head;head = temp;}return dummy; }
}

4.回文链表

1.快慢指针找到中间节点的前一个节点
2.翻转后面部分节点
3.同时比较值是否相等

class Solution {public boolean isPalindrome(ListNode head) {// 1.快慢指针找到中间节点前一个节点ListNode slow = head;ListNode fast = head.next;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}ListNode temp = slow.next;slow.next = null;// 2.翻转链表ListNode list2 = reverse(temp);// 3.比较判断是否回文while (head != null && list2 != null) {if (head.val == list2.val) {head = head.next;list2 = list2.next;} else {return false;}}return true;}public ListNode reverse(ListNode head) {ListNode dummy = null;while (head != null) {ListNode temp = head.next;head.next = dummy;dummy = head;head = temp;}return dummy;}
}

5.环形链表

快慢指针的应用:如果有环,其中快指针以相对速度为1接近慢指针

public class Solution {public boolean hasCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) {return true;}}return false;}
}

6.环形链表Ⅱ

考察快慢指针
假设相交点为y
则(x+y) * 2 = x + y + n(y+z) ==> x + y = n(y+z) ==> x = (n-1)(y+z) + z == > x = z

public class Solution {public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;// 1.找到相遇的节点while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) {while (slow != head) {slow = slow.next;head = head.next;}return slow;} }return null;}
}

7.合并两个有序链表

双指针的应用
思路:构造新的链表,不断判断大小并且加入

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode newList = new ListNode();ListNode dummy = newList;while (list1 != null && list2 != null) {if (list1.val < list2.val) {newList.next = list1;list1 = list1.next;} else {newList.next = list2;list2 = list2.next;}newList = newList.next;}if (list1 != null) newList.next = list1;if (list2 != null) newList.next = list2;return dummy.next;}
}

8.两数相加

考察携带因子,取余数等操作

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummy = new ListNode();ListNode dummy_head = dummy;int carry = 0;while (l1 != null || l2 != null || carry != 0) {if(l1 != null) {carry += l1.val;l1 = l1.next;}if (l2 != null) {carry += l2.val;l2 = l2.next;}dummy.next = new ListNode(carry % 10);carry = carry / 10;dummy = dummy.next;}return dummy_head.next;}
}

9.删除链表的倒数第n个节点

虚拟头节点的使用
注意:倒数第n个节点,可能是头节点,所以需要用虚拟头节点,避免单独考虑

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {// 1.快指针走n步ListNode dummy = new ListNode();dummy.next = head;ListNode fast = dummy;ListNode slow = dummy;while (n > 0) {fast = fast.next;n--;}while (fast.next != null) {slow = slow.next;fast = fast.next;}slow.next = slow.next.next;return dummy.next;}
}

10.两两交换链表中的节点

定义first和second指针,注意顺序first要先指向后后面

class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy = new ListNode();dummy.next = head;ListNode pre = dummy;while (pre.next != null && pre.next.next != null) {ListNode first = pre.next;ListNode second = pre.next.next;pre.next = second;first.next = second.next; // 关键second.next = first;pre = first;}return dummy.next;}
}
http://www.dtcms.com/a/443310.html

相关文章:

  • 建设网站招聘织梦网站档目管理空白
  • 进口网站建设简述jsp网站开发的环境配置过程
  • 2015年做那些网站致富广州网站制作开发公司
  • 有域名了怎么建立网站杭州市网站seo
  • 题解:P14041 [PAIO 2025] Towers
  • 城乡建设学校官方网站wordpress定时失败
  • 许昌长葛网站建设制作设计做外汇上什么网站看新闻
  • 案例学网页设计和网站建设网站建设百度不通过
  • 有哪些做外贸网站ps怎样做网站首页图
  • 网站建设论文设计网站开发软件成本
  • 丽水网站建设哪家好专业团队建设方案
  • 连云港做网站制作型云网站建设
  • 【Docker-Day 38】Kubernetes 核心调度:深入解析资源请求 (Requests) 与限制 (Limits) 的奥秘
  • 2328. 网格图中递增路径的数目 2001 关于灵神解法的消化
  • 网站数据库有哪些中企动力官网 网站
  • 正则表达式入门与进阶(优化版)
  • 服装销售网站建设策划书wordpress time()
  • 1.7 巴特沃斯滤波器
  • 在线做试卷网站网页设计作业代做
  • 个人网站免费的吗网站开发的体会
  • 做安防在哪个网站做广告呢保网微商城官网登录
  • 中国建设银行网站如何注册品牌网站建设 蝌蚪小7
  • 重庆专业做淘宝网站百度h5怎么发布
  • 厦门网站设计排行兰州网络推广徽hyhyk1
  • 用Python升级贾维斯:添加人脸识别功能,实现“刷脸”控制电脑/设备
  • 为什么java中不使用多叉树
  • 没人做网站了吗网站模块功能
  • 10.2 容器云部署准备(二)
  • 铜陵网站建设企业vi设计合同
  • 【文献笔记】NeurIPS 2022 | PointNeXt