小程序 - 链表检测环/链表是否交叉 等

链表检测环

int cycleExists(Node *head)
{
        Node *fast, *slow;
        if (head == NULL)
                return 0;
        for (slow = head, fast = head->next; fast && fast->next;
            fast = fast->next->next, slow = slow->next)
                if (slow == fast)
                        return 1;
        return 0;
}

链表是否交叉

int listOverlapped(Node *list1, Node *list2)
{
    if (!list1 || !list2)
        return 0;
    for (; list1->next; list1 = list1->next);
    for (; list2->next; list2 = list2->next);
    return list1 == list2;
}

两个链表第一个公共节点

Node* firstCommonNode(Node *list1, Node *list2)
{
    int num1, num2;
    Node *n1, *n2;
    if (!list1 || !list2)
        return NULL;
    for (num1 = 0, n1 = list1; n1->next; num1++, n1 = n1->next);
    for (num2 = 0, n2 = list2; n2->next; num2++, n2 = n2->next);
    if (n1 != n2)
        return NULL;
    if (num1 > num2)
        for (num1 -= num2; num1 > 0; num1--, list1 = list1->next);
    else
        for (num2 -= num1; num2 > 0; num2--, list2 = list2->next);
    for (; list1 != list2; list1 = list1->next, list2 = list2->next);
    return list1;
}
时间: 2024-10-01 02:49:52

小程序 - 链表检测环/链表是否交叉 等的相关文章

Linked List Cycle leetcode java (链表检测环)

题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 题解: 这道题连带着II是很经典的,在看CC150时候,纠结这个问题纠结了很久.在读了很多网上资料还有书的讲解以及和别人讨论之后,对这个专题终于明白了. 这一问只需要判断链表是否有环. 当链表没有环时是很好判断的,让一个指针一直往后走,遇见null了自然就没有环. 而如

微信小程序WIFI检测

主要实现功能:检测指定wifi签到: github源码:https://github.com/AINIJJ/wxWiFi 适用多种手机型号.有问题请下方留言 注意:用手机检测时候wifi和gps都要打开,如果gps关闭会获取wifi失败. 下载wifi名称要改成你自己得wifi名称. 原文地址:https://www.cnblogs.com/fangling/p/9210902.html

微信小程序发布新版本时自动提示用户更新

如图,当小程序发布新的版本后,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会弹出这个提示,提醒用户更新新的版本.用户点击确定就可以自动重启更新,点击取消则关闭弹窗,不再更新. 官方给的示例代码: const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log(res.hasUpdate) }) upd

关于链表的一个小程序

关于链表的一个小程序: /**************************链表*****************************//* 具备功能 *//* 链表按元素位置插入 *//* 链表按元素位置删除 *//* 链表全表遍历 *//* 链表整表创建(头插法) *//* 链表整表创建(尾插法) *//* 链表整表删除 *//**************************链表*****************************/ #include<stdio.h>#in

检测一个链表是否有环

  定义两个指针fast.slow,其中,fast是快指针,slow是慢指针,二者的初始值都指向链表头, slow每次前进一步,fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要跟慢指针比较,直到快指针等于慢指针为止,就证明了这个链表是带环的单向链表. 否则,这个是不带环的链表(fast先行到达尾部为NULL,则为无环链表). 代码: public boolean IsLoop(Node head)  //判断是否有环的函数 { Node fast = head; Node slo

数据结构Java实现04----循环链表、仿真链表

数据结构Java实现04----循环链表.仿真链表 单向循环链表 双向循环链表 仿真链表 一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环. 和单链表相比,循环单链表的长处是从链尾到链头比较方便.当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表. 和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为

《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明

先看看原题:<编程之美>3.6编程判断两个链表是否相交,原题假设两个链表不带环. 为了防止剧透使得没看过原题目的读者丧失思考的乐趣,我把最好的解法隐藏起来.由于这个问题本身的解答并不是本文的重点,扩展问题也采用这种形式呈现. 注:位于(*)符号之间的文字出自于:http://blog.csdn.net/v_july_v/article/details/6447013,作者v_JULY_v. 用指针p1.p2分别指向两个链表头,不断后移:最后到达各自表尾时,若p1==p2,那么两个链表必相交 用

单链表的环入口,环大小,解环

1.单链表是否有环 使用快慢指针,都从head出发,慢指针一次一步,快指针一次两步,如果两个指针相遇,说明链表有环,否则,快指针为null或其next为null,到达末尾节点 function hasCircle(head){ var slow = head, fast = head; while(fast && fast.next){ slow = slow.next; fast = fast.next.next; if(slow == fast){ break; } } return

带环链表的入口

带环的单链表: 如上图,List 为一个带有环的单链表,环的大小为5: 证明: S 为 slow 指针相遇前走的距离,2S 为 fast 指针相遇前走过的距离: ∵ 2S = S + n*R;        //n slow,fast指针相遇前 fast 多经历的圈数  S = H_I + R1: ∴S = n*R; ∴n*R = H_I  + R1; ∵ R1 + R2 = R; ∴(n-1)*R = H_I - R2; ∴(n-1)*R + R2 = H_I;       //结论:(交点到