首页 > 其他分享 >代码随想录:链表相交

代码随想录:链表相交

时间:2024-11-20 20:07:58浏览次数:1  
标签:ListNode int targetb 随想录 相交 next 链表 targeta

代码随想录:链表相交

像做数学题一样,要挖掘出表象下的实际条件。

比如这道题,链表在一段时间后相交,其实含义是两者的尾部是相同的,所以只需要将尾部对齐即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //因为链表最终相交,所以两链表的末尾部分肯定是相同的,只需要将两链表从尾部对齐即可
        int a_length = -1;
        int b_length = -1;
        ListNode* virta = new ListNode(0,headA);
        ListNode* virtb = new ListNode(0,headB);
        ListNode* targeta = virta;
        ListNode* targetb = virtb;

        while(targeta!=NULL){
            targeta = targeta->next;
            a_length++;
        }
        while(targetb!=NULL){
            targetb = targetb->next;
            b_length++;
        }

        targeta = virta;
        targetb = virtb;

        if(a_length>b_length){
            for(int i=0;i<a_length-b_length;i++){
                targeta = targeta->next;
            }
        }else{
                for(int i=0;i<b_length-a_length;i++){
                targetb = targetb->next;
            }
        }

        while(targeta!=NULL){
            if(targeta->next ==targetb->next){
                return targeta->next;
            }
            targeta = targeta->next;
            targetb = targetb->next;
        }

        return NULL;
    }
};

标签:ListNode,int,targetb,随想录,相交,next,链表,targeta
From: https://www.cnblogs.com/huigugu/p/18559195

相关文章

  • C语言:链表
    链表是一种常见的线性数据结构,其中每个元素(称为节点)包含两部分:数据和指向下一个节点的指针。链表的主要优点是插入和删除操作的时间复杂度较低,但随机访问的效率不如数组。1.链表的基本概念节点(Node):链表的基本单元,包含数据和指向下一个节点的指针。头节点(Head):链表的第一个......
  • 力扣题目解析--合并k个升序链表
    题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->......
  • LCR 022. 环形链表 II(中等)(主站142)
    https://leetcode.cn/problems/c32eOV/https://leetcode.cn/problems/linked-list-cycle-ii/难度:☆☆☆题目:给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回null。为了表示给定......
  • LCR 021. 删除链表的倒数第 N 个结点(中等)(主站19)
    https://leetcode.cn/problems/SLwz0R/https://leetcode.cn/problems/remove-nth-node-from-end-of-list/难度:☆☆☆题目:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]输入:head=[1],n=1输出......
  • 代码随想录:删除链表的倒数第N个节点
    代码随想录:删除链表的倒数第N个节点链表题目如果想找当前节点的前n个节点的话,用双指针法。另外务必用虚头节点。/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*......
  • 代码随想录:两两交换链表中的节点
    代码随想录:两两交换链表中的节点链表题目务必用虚头节点,很多问题会变简单很多/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(......
  • 代码随想录算法训练营day51| 卡码网99.岛屿数量 卡码网100.岛屿的最大面积
    学习资料:https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#思路深度优先搜索和广度优先搜索今天用的邻接矩阵学习记录:卡码网99.岛屿数量(深搜or广搜;用一个自己设计的二维矩阵来控制节点的移动方向:上下左右)点击查看代码fromcollectionsimportdequedi......
  • 2024/11/18日 日志 数据结构实验(1)---链表逆置、线性表A,B顺序存储合并、双向循环链表应
    链表逆置题目:https://pintia.cn/problem-sets/1855808612225744896/exam/problems/type/6?problemSetProblemId=1855808768018968576解答:点击查看代码structListNode*reverse(structListNode*head){structListNode*prev=NULL;structListNode*current=head;......
  • 24. 两两交换链表中的节点
    https://leetcode.cn/problems/swap-nodes-in-pairs/?envType=study-plan-v2&envId=top-100-liked对于我们正常交换单向链表的两个节点我们需要知道三个节点的信息,1.对于a->b->c,我们要交换a、b就要知道a、b、c三个节点,因为我们需要将a的next指向c,将b的next指向a,由于b->c这条......
  • 常见链表类型
    单向链表双向链表循环链表双向循环链表1.单向链表单向链表的每个节点只包含数据和指向下一个节点的指针。它只能从头到尾单向遍历。[数据|下一节点指针]->[数据|下一节点指针]->NULL 示例#include<stdio.h>#include<stdlib.h>structNode{intdata;st......