首页 > 其他分享 >两个链表相交问题

两个链表相交问题

时间:2023-04-12 14:47:04浏览次数:44  
标签:lenA 两个 相交 next 链表 curB curA ListNode

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

 

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

题目链接链表相交

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* curA = headA;
        ListNode* curB = headB;
        int lenA = 0, lenB = 0;
        while (curA != NULL) { // 求链表A的长度
            lenA++;
            curA = curA->next;
        }
        while (curB != NULL) { // 求链表B的长度
            lenB++;
            curB = curB->next;
        }
        curA = headA;
        curB = headB;
        // 让curA为最长链表的头,lenA为其长度
        if (lenB > lenA) {
            swap (lenA, lenB);
            swap (curA, curB);
        }
        // 求长度差
        int gap = lenA - lenB;
        // 让curA和curB在同一起点上(末尾位置对齐)
        while (gap--) {
            curA = curA->next;
        }
        // 遍历curA 和 curB,遇到相同则直接返回
        while (curA != NULL) {
            if (curA == curB) {
                return curA;
            }
            curA = curA->next;
            curB = curB->next;
        }
        return NULL;
    }
};

 

标签:lenA,两个,相交,next,链表,curB,curA,ListNode
From: https://www.cnblogs.com/52ld/p/17309724.html

相关文章

  • 四种语言刷算法之相交链表
    力扣160. 相交链表1、C/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*getIntersectionNode(structListNode*headA,structListNode*headB){if(headA==NULL||headB==NU......
  • linux安装两个python版本
    1.下载python3安装包wgethttps://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz2.解压python的tgz压缩包文件tar-xzvfPython-3.7.2.tgz3.进入解压的文件cdPython-3.7.24.在python文件路径下编译pythonprefix=/usr/local/python37,指定python安装路径,这个路径......
  • 约瑟夫环问题---&解题方法 静态单链表&一维数组
      importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt();int[]ant=newint[150];for(int......
  • 如何隐藏一个元素?&&css中出现了两个一样的类定义,如何避免冲突?
    1.如何隐藏一个元素?1.使用display属性:设置元素的display属性为none,这样元素在页面上不会占用任何空间,同时也不会对其他元素造成影响2.使用visibility属性:设置元素的visbility属性为hidden,这样元素在页面上不可见,但仍然占用空间3.使用opacity属性:设置元素的opacity属性为0,这样元......
  • 数组和链表的区别
    1.读取数组读取耗时为O(1),支持随机读取;链表读取耗时为O(n),仅支持顺序读取; 2.插入(已知目标节点)数组插入耗时为O(n);链表插入耗时为O(1); 3.删除(同插入)数组插入耗时为O(n);链表插入耗时为O(1);  ......
  • 1019. 链表中的下一个更大节点
    1019.链表中的下一个更大节点给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个更大节点的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值严格大于它的值。返回一个整数数组answer,其中answer[i]是第i个节点(从1开始)的下一个......
  • 203. 移除链表元素
    参考链接:代码随想录题目描述:解题思路:由单链表的特殊性,如果删除的是头节点应该怎么操作呢?这里就涉及如下链表操作的两种方式:-直接使用原来的链表进行删除操作-设置一个虚拟头节点进行删除操作第一种操作: 移除头节点和移除其他节点的操作是不一样的,因为链表的其他节点......
  • #yyds干货盘点# LeetCode程序员面试金典:合并两个有序链表
    题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]代码实现:classSolution{publicLis......
  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 数组、链表、跳表的基本实现和特性
    1.如何对链表加速  2.添加第一级索引  3.添加第二级索引  4.增加N级索引  5.思量及索引添加流程解释  5_1.如何找到数字8  5_2.如何找到数字9  6.跳表查询的时间复杂度分析  6_2.时间复杂度例题  ......