首页 > 其他分享 >链表相交

链表相交

时间:2023-04-26 21:38:46浏览次数:33  
标签:ListNode 相交 链表 curB headA curA NULL

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

需要注意的点:

1、定义的两个指针在遍历完链表的长度后,要重新指向头结点

2、让长、短链表的尾端对齐

3、相交意味着指针相同

 

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* curA=headA;
        ListNode* curB=headB;
        int lenA=0;
        int lenB=0;

        while(curA!=NULL)//计算链表的长度
        {
            lenA++;
            curA=curA->next;
        }

        while(curB!=NULL)
        {
            lenB++;
            curB=curB->next;
        }

        curA=headA;//重新指向头结点
        curB=headB;

        if(lenA<lenB)//保证最大的链表为curA,方便后续处理
        {
            swap(lenA,lenB);
            swap(curA,curB);
        }
        int gap=lenA-lenB;
        while(gap--)//让curA移动到,和curB 末尾对齐的位置
        {
            curA=curA->next;
        }

        while(curA!=NULL)//找出指针相同的点
        {
            if(curA==curB)
            {
                return curA;
            }

            curA=curA->next;
            curB=curB->next;
        }

        return NULL;


        

    }
};

 

标签:ListNode,相交,链表,curB,headA,curA,NULL
From: https://www.cnblogs.com/gaishuobulao/p/17357392.html

相关文章

  • 删除链表的倒数第N个节点
    题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]本题需要使用双指针,需要注意的点:1、双指针都指向头结点2、快指针提前移动n+1个点3、结束条件:快指针指向空指针4、慢指针指向要删除结点的前一个结点5、删除结点时......
  • 循环控制:链表和数组
    循环是常用的流程环节。1//链表控制2//链表控制的优点,是通过指针来定位,那么循环的过程中,即是可变的,实时性很强。3vartmp*datastruct.ListNode4tmp=&datastruct.ListNode{Val:-1,Next:nil}56i:=07fornode:=tmp;node!=......
  • 两两交换链表中的结点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)  步骤: classSolution{public:ListNode*swapPairs(ListNode*head){ListNode*dummyHead=newListNode(0);//......
  • 23-4-25--链表--一元多项式求导
    设计函数求一元多项式的导数。输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。输入样例:34-5261-20 ......
  • 分治算法:剑指 Offer 25. 合并两个排序的链表
    题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 限制:0<=链表长度<=1000 解题思路:    classSolution{publicListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedum=newListNode......
  • #yyds干货盘点# LeetCode面试题:分隔链表
    1.简述:给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有小于x的节点都出现在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。 示例1:输入:head=[1,4,3,2,5,2],x=3输出:[1,2,2,4,3,5]示例2:输入:head=[2,1],x=2输出:[1,2......
  • [Leetcode]返回链表开始入环的第一个节点
    力扣链接思路一:快慢指针法一个指针从相遇点走,一个指针从起始点走,会在入口点相遇.最终代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*detectCycle(structListNode*head){......
  • 快慢指针判断链表中是否存在循环
    给链表设置快慢两个指针,每次移动时,快指针的速度是慢指针的一倍。即每次快指针移动两次,慢指针移动一次。如果存在循环,快指针跑两圈就可以追上慢指针。 为什么不让慢指针停在原地等呢?因为循环有可能出现在中间位置。如此一来,循环过的位置就不必从头再循环。 整个过程的所有......
  • [Leetcode]找出链表公共结点
    力扣链接思路:先求出两个链表的长度差长链表先走差距步同时走,第一个地址相同的是交点代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*getIntersectionNode(structListNode*he......
  • 19删除链表的倒数第N个节点
    力扣刷题19.删除链表的倒数第N个节点--day4题目分析这道题目比较简单,熟练掌握单链表中删除节点的操作解法ListNode*removeNthFromEnd(ListNode*head,intn){ListNode*dummyHead=newListNode();dummyHead->next=head;ListNode*p=head;int......