• LeetCode每日练习之链表常见题目


    1. 两个链表的第一个公共节点

    输入两个链表,找出它们的第一个公共节点。

    1.1 思路

    1. 哈希和集合,先将一个链表全部存到Map里,然后一边遍历第二个链表,一边检测Hash是否存在当前结点,如果有交点,那么一定能检测出来,
    2. 使用两个栈,分别将两个链表入栈,然后分别出栈对比,如果相等就出栈,知道找到最晚出栈的那组,
    3. 拼接两个字符串,将两个字符串AB,拼接成AB和BA,拼接后可以发现规律,最后一部分一样,那么第一个相等的结点就是交点。
    4. 差和双指针问题,先统计两个链表的长度,求出两个长度的差,让长的先走k步,然后两个指针同时走,第一个相等的结点就是两个的交点。

    1.2 代码

    1. class Solution {
    2. ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    3. //差和双指针
    4. if(headA == null || headB == null){
    5. return null;
    6. }
    7. //1.先计算两个链表的长度
    8. ListNode node1 = headA;
    9. ListNode node2 = headB;
    10. int l1=0,l2=0;
    11. while(node1 != null){
    12. node1 = node1.next;
    13. l1++;
    14. }
    15. while(node2 != null){
    16. node2 = node2.next;
    17. l2++;
    18. }
    19. int sub = l1>l2?l1-l2:l2-l1;
    20. //2.长的先走k步
    21. ListNode cur1 = headA;
    22. ListNode cur2 = headB;
    23. if(l1 > l2){
    24. while(sub != 0){
    25. cur1 = cur1.next;
    26. sub--;
    27. }
    28. }
    29. if(l1 < l2){
    30. while(sub != 0){
    31. cur2 = cur2.next;
    32. sub--;
    33. }
    34. }
    35. //两个指针一起走,值相同的时候代表有交点
    36. while(cur1 != cur2){
    37. cur1 = cur1.next;
    38. cur2 = cur2.next;
    39. }
    40. return cur1;
    41. }
    42. }

     2. 回文链表

    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

    2.1 思路

    将链表存入到栈中,然后一边遍历,一边出栈比较,如果出现不相等则返回false,否则返回true。

    2.2 代码

    1. class Solution {
    2. public boolean isPalindrome(ListNode head) {
    3. //压入栈中,一遍遍历一边出栈,只要有一个不相等就返回false
    4. ListNode node1 = head;
    5. Stack stack = new Stack<>();
    6. while(node1 != null){
    7. stack.push(node1.val);
    8. node1 = node1.next;
    9. }
    10. ListNode node2 = head;
    11. while(node2 != null){
    12. if(node2.val != stack.pop()){
    13. return false;
    14. }
    15. node2 = node2.next;
    16. }
    17. return true;
    18. }
    19. }

  • 相关阅读:
    Springcloud2021+Nacos2.2+Dubbo3+Seata1.6实现分布式事务
    鼎盛合:国内“遥遥领先”的芯片技术
    Django 里如何使用 sqlite (操作步骤)
    6.终于了解volatile的原理和使用方法了
    对称二叉树
    自助报表和 BI 能解决多少事?
    LeetCode:2603. 收集树中金币 详解(2023.9.21 C++)
    Spark大数据分析与实战笔记(第三章 Spark RDD 弹性分布式数据集-04)
    SpringMvc(一)-初识
    DSPE-PEG-GE11,GE11-PEG-DSPE,磷脂-聚乙二醇-靶向多肽GE11
  • 原文地址:https://blog.csdn.net/m0_54138535/article/details/132985899