C语言/数据结构——(相交链表)

一.前言

今天在力扣上刷到了一道题,想着和大家一起分享一下这道题------相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists废话不多说,让我们开始今天的分享吧。

二.正文

1.1题目描述

是不是感觉好长,我也这么觉得。哈哈,不过没办法,大家们凑合看一下吧,毕竟人家的题就那么长。

1.2题目分析

我想到有两种方法,一种是暴力求解,时间复杂度是O(N^2),还有一种是一种稍微巧妙一点的技巧,时间复杂度是(N)。

两种方法共同部分:

我们可以创建两个指针分别是指向headA和headB的 ,pcur1和pcur2。并让pcur1=headA

pcur2=pcurB。

我们首先需要判断该链表是不是相交链表,如果是,则返回相交链表的第一个相交节点。否则,返回NULL。那么如何判断该链表是不是相交链表呢?其实我们可以让pcur1和pcur2分别遍历两个链表的最后一个节点即可,如果pcur1=pcur2则说明两个链表至少有一个相交节点,毫无疑问这肯定是相交节点。反之,pcur1!=pcur2,则说明,不是相交链表。(值得注意的是,完成上面部分后,记得让pcur1=headA,pcur2=headB,因为pcur1和pcur2后续我们还需要重新遍历两个链表)

(i)暴力算法:

我们可以让headA中的每一个节点都与headB中的节点遍历一次,然后让headA的下一个节点,重复这个动作,直到headA的最后一个节点遍历结束。

这是该方法的代码:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{
ListNode* pcur1,*pcur2;
pcur1=headA;
pcur2=headB;
while(pcur1->next!=NULL)
{
    pcur1=pcur1->next;
}
while(pcur2->next!=NULL)
{
    pcur2=pcur2->next;
}
if(pcur2!=pcur1)
return NULL;
pcur1=headA;
pcur2=headB;
while(pcur1->next!=NULL)
{
while(pcur2->next!=NULL)
{
if(pcur1==pcur2)
return pcur1;
pcur2=pcur2->next;
}
pcur2=headB;
pcur1=pcur1->next;
}
return pcur1;
}

(ii)非暴力算法:

那么我们应该依据什么来遍历相对长度前的数据呢?我们可以利用在遍历A和B的同时,让代表A链表len1++来算出长度,同理len2是算出B的长度。定义一个变量gap=abs(len1-len2)算出绝对值,如果A链表长,则A链表先遍历gap个长度的节点,反之B链表长则,B链表先遍历gap个长度的节点。

最后的步骤是上图所示,相对长度中的上下节点依次比较。

三.结言

今天的题目分享就到此结束了,拜拜了,家人们。

相关推荐
H.莓飛3 分钟前
【数据结构】二叉树
linux·数据结构·算法
梦帮科技30 分钟前
【3.0修订版】创世与节点工程:genesis.json 与 node.toml 解剖
数据结构·算法·json·去中心化·区块链·智能合约·信任链
梦帮科技1 小时前
【3.0修订版】 RNS 代币架构:ERC20 五件套扩展与六钱包分配
数据结构·后端·算法·架构·node.js·区块链·php
白山编程大哥1 小时前
C语言篇:可变参数函数
c语言·开发语言
水饺编程1 小时前
第1章:开发环境搭建,在 Windows 中安装 VS 2019
linux·c语言·汇编·visual studio
ebiobiz1 小时前
Zig 嵌入式底层库选择与 build.zig 组织指南
c语言·c++·嵌入式硬件·mcu
h_a_o777oah14 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO914 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician14 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.14 小时前
VLAN 资源池(100~200 分档)
数据结构·算法