首页 > 其他分享 >面试题 02.07. 链表相交C

面试题 02.07. 链表相交C

时间:2024-02-28 16:57:09浏览次数:23  
标签:面试题 ListNode struct int 02.07 next 链表 headB headA

利用链表的特性,如果相交的话,后面就不可能岔开!

你可以想象把他们有同一个尾巴,然后从尾巴往前看。

所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
int len(struct ListNode* list){
    int i=0;
    while(list){
        i++;
        list=list->next;
    }
    return i;
}

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {  
    if(!headA||!headB) return NULL;
    int a=len(headA);
    int b=len(headB);
    if(a==b){
        if(headA==headB) return headA;
    } 
    while(a!=b){
        if(a>b){
            headA=headA->next;
            a--;
        }else if(b>a){
            headB=headB->next;
            b--;
        }
    }
    while(headA!=headB && headA && headB){
        headA=headA->next;
        headB=headB->next;
    }
    if(!headA||!headB) return NULL;
    return headA;
}

结果:

标签:面试题,ListNode,struct,int,02.07,next,链表,headB,headA
From: https://www.cnblogs.com/llllmz/p/18041020

相关文章

  • 19. 删除链表的倒数第 N 个结点C
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*removeNthFromEnd(structListNode*head,intn){if(!head)returnNULL;inti=0;structListNode*tem=head;......
  • 【力扣】奇偶链表
    题目描述思路我想起了一位故人。。前面那道分隔链表的题,只需要把<x的条件改为位置的奇偶即可完全照搬过来,出题人偷懒了属于是。试着不抄代码重新写一遍:简单写了一下发现这道题不太适合用递归算法求解,因为结点在整个链表中的位置不太好确认,试着用双指针法写一下:classSolut......
  • 2024.02.07
    模拟器卸载安装的APP的方法在做安卓的实验时遇到了一个问题需要在模拟器卸载APP,找了网上很多资料发现没有用,于是自己摸索解决了。以Pixel2API29为例1、打开模拟器,点击更多2、点击帮助(Help)3、找到菜单的快捷命令4、退出到原始的模拟器页面,输入对应的快捷键(即,Ctrl+M)出现......
  • 203. 移除链表元素C
    写了个递归/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*delect(structListNode*head,intx){if(!head)returnNULL;if(head->val==x){structListNode*......
  • 前端面试题(四)—— 事件委托(Event Delegation)
    一、什么是事件委托事件委托(EventDelegation)是一种常用的技术。它利用事件冒泡的特性,在父元素上监听事件,而不是在子元素上直接添加事件监听器。通过在父元素上捕获事件,然后根据事件的目标(target)来执行相应的操作,从而实现对子元素的事件处理。二、实现方式通过给父元素添加事......
  • leedcode 环形链表
    快慢指针:classSolution:defhasCycle(self,head:Optional[ListNode])->bool:#如果链表为空或者只有一个节点,肯定不存在环ifnotheadornothead.next:returnFalse#初始化慢指针和快指针slow=headf......
  • 【力扣】反转链表II
    题目描述思路老样子,还是先用递归试试。在基本问题中,也就是left==rigth或者left+1==right时,直接将两个元素调换顺序即可。我突然发现代码随想录里好像讲过一个用双指针法反转链表的算法。那道题是把整个链表翻转,代码如下://双指针法classSolution{public:ListN......
  • Java面试题笔记-多线程篇
    创建线程的几种方式继承Thread类,重写run方法实现Runnable接口,实现run方法实现Callable,实现call方法,配合FutureTask获取线程返回结果通过ThreadPoolExecuter线程池获取线程资源这几种方法的底层都是Runnable,Thread是Runnable接口的实现类,Callable配合FutureTask使用......
  • 面试题(三)—— 跨域
    一、什么是跨域1、跨域的产生在Web开发中,一个网页请求另一个域(域名、协议、端口号任一不同)的资源,就会发生跨域。2、跨域请求跨域请求是指在浏览器中执行的请求,其目标资源的域名、协议或端口与当前页面不同。3、跨域资源共享(CORS)跨域资源共享(CORS)是一种机制,它允许在一个源(域......
  • 面试题以及一些问题概述
    1数据库三大范式是什么数据库的三大范式是指关系数据库设计中的三个规范化级别,用于规范化数据库中的数据结构,提高数据的一致性和减少数据冗余。这三大范式分别是:1.第一范式(1NF):要求数据库表中的每个字段都是原子性的,不可再分。也就是说,每个字段中的数据不能包含多个值或多个属......