【LeetCode160】-相交链表

方法一(栈):

实现思路

分别遍历两个链表,将链表的节点指针压入栈中,然后依次比对两个栈的栈顶元素,相同则将该节点保存在变量t中,并弹栈,直到栈为空或者栈顶元素不相同时,停止对栈的操作,返回变量t的值为结果

实现代码

/**
 * 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) {
        stack<ListNode*> s1;
        stack<ListNode*> s2;
        while(headA!=nullptr){
            s1.push(headA);
            headA=headA->next;
        }
        while(headB!=nullptr){
            s2.push(headB);
            headB=headB->next;
        }
        ListNode *t=nullptr;
        while(1){
            if(s1.empty()||s2.empty()) break;
            if(s1.top()==s2.top()){
                t=s1.top();
                s1.pop();
                s2.pop();
            }
            else{
                break;
            }
        }
        return t;
    }
};

提交结果及分析

在这里插入图片描述

空间复杂度O(n)
时间复杂度O(n)


方法二(Set集合):

在这里插入图片描述

实现思路

在这里插入图片描述TIP:判断一元素是否在set中使用.find(x)!=.end()判断

实现代码

在这里插入图片描述

分析

由于使用了set集合这一数据结构
时间复杂度O(n log(n)),空间复杂度为O(n)

方法三

实现思路

在这里插入图片描述
总结起来是将不同长度的链表进行对齐,对齐后同时遍历,遍历到第一个相同的元素,就是我们所要的结果

实现代码在这里插入图片描述

分析

时间复杂度O(n),空间复杂度O(1)

总结

总体看下来还是方法三最简单,没有那些冗余不必要的操作,就是需要多实现两个小函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值