首页 > 编程语言 >代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II

代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II

时间:2024-10-20 15:09:37浏览次数:8  
标签:面试题 ListNode cur self 随想录 next 链表 curA

1. leetcode面试题02.07.链表相交

题目链接:面试题 02.07. 链表相交 - 力扣(LeetCode)

文章链接:代码随想录

1.1 代码

跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        lenA ,lenB = 0,0
        cur =headA
        while cur:
            cur = cur.next
            lenA +=1
        cur = headB
        while cur:
            cur = cur.next
            lenB +=1
        curA,curB = headA,headB
        if lenB>lenA:
            lenA,lenB = lenB,lenA
            curA,curB = curB,curA
        for _ in range(lenA-lenB):
            curA = curA.next
        while curB:
            if curA == curB:
                return curA
            else:
                curA = curA.next
                curB = curB.next
        return None

1.2 小结

  1. 这一块就是判断位置相同,就返回,思路就是我先将两个链表的尾部进行对齐,尾部对齐后的数据就可以进行判断,如果找到了这连个位置的指针处的值相等则返回,否则就继续向后找的一个思路

2 leetcode142 环形链表II

题目链接:142. 环形链表 II - 力扣(LeetCode)

文章链接:代码随想录

视频链接:把环形链表讲清楚! 如何判断环形链表?如何找到环形链表的入口? LeetCode:142.环形链表II_哔哩哔哩_bilibili

2.1代码

这道题,怎么说呢,字少但是看了不会,第一次刷这种题,我也放过自己,就是嗯,看看别人怎么做的去学习思路就好了

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        fast = head
        slow = head
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
            if fast == slow:
                index1 = head
                index2 = slow
                while index1!=index2:
                    index1 = index1.next
                    index2 = index2.next
                return index1
        return None

2.2小结

  1. 判断链表是不是环形链表就是找两个指针,判断快慢指针会不会相等,因为转圈的时候快的和慢的指针总会相遇
  2. 判断两个指针的相遇位置方法就是通过里面推理,最后发现从相遇位置给一个指针和从起始位置给一个指针,两者不断进行走,总会相遇

标签:面试题,ListNode,cur,self,随想录,next,链表,curA
From: https://www.cnblogs.com/csfy0524/p/18487339

相关文章

  • 代码随想录|回溯part 01
    存在于递归函数的下方,递归与回溯相辅相成回溯搜索法:暴力算法适用范围:•组合问题:N个数里面按一定规则找出k个数的集合(无序)•切割问题:一个字符串按一定规则有几种切割方式•子集问题:一个N个数的集合里有多少符合条件的子集•排列问题:N个数按一定规则全排列,有几种排列方......
  • LeetCode第160:相交链表
    文章目录......
  • 码城|挑战中,Java面试题复习第3天,坚持就是胜利【悟空非空也】
     ......
  • 【算法】将单向链表按某值分成左边小、中间相等、右边大的形式
    前置知识数据结构:链表测试链接:链表划分本题考察对链表coding速度的熟练度。也考察读者对链表分块的处理,另外,透过此题可以窥探链表快速排序的实现。题目给定一个单向链表的头节点head,节点的值是int类型。给定任意整数pivot。实现这样一个函数。将原链表调整为......
  • 代码随想录算法训练营day20| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树
    学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课学习记录:669.修剪二叉搜索树(直接在原函数上操作,要根据情况用root的左右子树递归,因为子树中有满足条件的;前序:根左右)点击查看代码#Definitionforabinarytreenode.#classTreeNode:#def_......
  • 【C++】原地逆置单链表(不开辟新的储存空间)
    首先看图例:创建一个单链表L,并用指针p指向需要逆置的第一个结点,s指向p的下一个。(这里s的作用是为了防止p后的结点丢失) 第一个结点逆置后成为最后一个,所以其后为NULL,即p->next=NULL(其他结点正常头插)用s指向了的p之后的结点,所以它们不会丢失。第一个结点接上后,p、s重新指向......
  • C语言解决约瑟夫环(PTA链表)
    题意:就是N个人围成一个圈(想到循环),开始报数,报到一个指定的数p,则这个人出局,后延,比如本题的样例,第三个人报了3,则第四个人继续从1开始报数,一直循环下去,第七个人报完之后,再到第一个人,直到只剩下一个人,那么下一个出局的只剩下这个人。解题思路:我们看到,最后一个人报数之后,又回到了......
  • 代码随想录算法训练营 | 647. 回文子串,516.最长回文子序列
    647.回文子串题目链接:647.回文子串文档讲解︰代码随想录(programmercarl.com)视频讲解︰回文子串日期:2024-10-19想法:本题精髓在于dp[i][j]表示的是s[i,j]这个子字符串是不是回文的,是Boolean类型,s[i]s[j]不等时,肯定不回文;s[i]s[j]相等时,开始看ij的大小,ij大小相等那么表示单个字......
  • 小于n的最大数,记一道字节面试题
    packageclient;importjava.util.Arrays;publicclassMainTest{publicstaticvoidmain(String[]args){//TestcaseexamplesSystem.out.println(maxN(newint[]{0,1,2,3,4,5,6,7,8,9},235));//Expected:235System.o......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    1.leetcode24两两交换链表中的节点题目链接:24.两两交换链表中的节点-力扣(LeetCode)文章链接:代码随想录(programmercarl.com)视频链接:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili1.1代码这个代码是用循环的思路来进行判断的,写的过程挺......