首页 > 编程语言 >四种语言刷算法之环形链表 II

四种语言刷算法之环形链表 II

时间:2023-05-08 09:12:12浏览次数:48  
标签:II head ListNode None next 链表 算法 return NULL

力扣142. 环形链表 II

1、C

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head) {
    if (head==NULL||head->next==NULL)return NULL;
    struct ListNode* p = head->next;
    struct ListNode *q = head->next->next;
    while(p!=NULL&&q!=NULL){
        if(p==q){
            p = head;
            while(p!=q){
                p = p->next;
                q = q->next;
            }
            return p;
        }
        else{
            p = p->next;
            if(q->next!=NULL){
                q = q->next->next;
            }
            else{
                break;
            }
        }
    }
    return NULL;
}

2、C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
       if(head==NULL||head->next==NULL)return NULL;
       ListNode *p = head->next;
       ListNode *q = head->next->next;
       while(p!=NULL&&q!=NULL){
           if(p==q){
               p = head;
               while(p!=q){
                   p = p->next;
                   q = q->next;
               }
               return p;
           }
           else{
               p = p->next;
               if(q->next!=NULL){
                   q = q->next->next;
               }
               else{
                   return NULL;
               }
           }
       }
       return NULL;
    }
};

3、JAVA

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head==null||head.next==null){
            return null;
        }
        ListNode p = head.next;
        ListNode q = head.next.next;
        while(p!=null&&q!=null){
            if(p==q){
                p = head;
                while(p!=q){
                    p = p.next;
                    q = q.next;
                }
                return p;
            }
            else{
                p = p.next;
                if(q.next==null){
                    return null;
                }
                else{
                    q = q.next.next;
                }
            }
        }
        return null;
    }
}

4、Python

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

class Solution(object):
    def detectCycle(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head is None or head.next is None:
            return None
        p = head.next;
        q = head.next.next
        while(p is not None and q is not None):
            if p == q:
                p = head
                while(q!=p):
                    p = p.next
                    q = q.next
                return p
            else:
                p = p.next
                if q.next is None:
                    return None
                else:
                    q = q.next.next
        return None

标签:II,head,ListNode,None,next,链表,算法,return,NULL
From: https://www.cnblogs.com/cmkbk/p/17372812.html

相关文章

  • 十四、JVM-垃圾相关算法(基础篇)
    一、标记阶段:引用计数算法1、对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶......
  • 区域生长算法与图像分割
    1.区域生长区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入符合相似性判据的邻近像素,当满足生长停止条件,区域生长终止。其中相似性判据可以是像素灰度值、颜色、纹理特征等图像信息。(另一种区域生长是先将图像分割成很多的一......
  • iic(i2c)协议简介
    近来了解了下iic总线协议,记录下知识点+++++Q:什么是iic协议?A:iic协议是NXP研发的半双工串行总线协议,只有两条总线就可连接多个设备,两条总线分别是sda(串行数据)和scl(串行时钟),具有上拉电阻,使得总线空闲状态下sda和scl上都是高电平。+++++Q:iic协议有什么特点?适合什么场景?A:ii......
  • JS逆向 -- 某平台登录算法分析(RSA加密)
    一、输入账号密码,进行抓包二、F12打开开发者工具,抓包分析,password被加密了三、全局搜索password关键字,挨个分析,在箭头标记处找到了关键代码四、局部搜索,定位加密的关键点,通过JSEncrypt,setPublicKey等关键字分析是RSA加密五、代码编写1、调用RSA加密的基本代码编写functionaiyou(pw......
  • 扩展欧几里得算法
    扩展欧几里得算法前置条件:需要掌握裴蜀定理和欧几里得算法裴蜀定理:对于不全为0的整数a,b,一定有整数x,y,使得ax+by=gcd(a,b)欧几里得算法:gcd(a,b)==gcd(b,a%b)假设有组特解x0,y0,使得ax0+by0=gcd(a,b)则必有bx1+(a%b)y1=gcd(b,a%b)=gcd(a,......
  • 文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题
    四、函数$\lceil\lgn\rceil!$多项式有界吗?函数$\lceil\lg\lgn\rceil!$多项式有界吗?文心一言:chatgpt:对于第一个问题,函数$\lceil\lgn\rceil!$是阶乘的形式,可以证明它是超多项式增长的,因此不是多项式有界的。对于第二个问题,函数$\lceil\lg\lgn\rceil!$......
  • 【算法基础】DFS深度优先算法 —— AcWing 843. n-皇后问题 AcWing 842. 排列数字
    n-皇后问题是一个经典的dfs深度优先遍历的题目,在题解这一题之前,将由浅入深,先讲解一个n-皇后问题的母题。-------AcWing842.排列数字 [AcWing842].排列数字题目概述给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格......
  • 文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题
    四、函数多项式有界吗?函数多项式有界吗?文心一言:chatgpt:对于第一个问题,函数是阶乘的形式,可以证明它是超多项式增长的,因此不是多项式有界的。对于第二个问题,函数的增长速度比慢很多。虽然不是多项式,但是它是多项式有界的,也就是说,存在一个多项式和常数,使得当足够大时......
  • C语言基础算法
    1、计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。C语言实现的代码如下:/* Displaying Fibonacci sequence up to nth term where n is entered by user. */#include <stdio.h>int main(){i......
  • 基于双目图像三维建模算法的测量目标物体体积计算matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要         双目立体视觉(BinocularStereoVision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三......