算法-链表篇06-链表相交
链表相交
力扣题目链接
题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
 
解题思路
这道题我看全是用双指针和哈希方法完成的,所以发布一下我的栈方法。
 先把链表存入两个栈中,依次拿出来进行比较,直到元素不相同或者栈为空,然后返回最后一个相同的结点,就是答案。
题解
#include <stack>
class Solution {
public:
    ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
        if(headA == nullptr || headB == nullptr){
            return nullptr;
        }
        
        stack<ListNode*> sa;
        stack<ListNode*> sb;
        ListNode* pa = headA;
        ListNode* pb = headB;
        while (pa) {
            sa.push(pa);
            pa = pa->next;
        }
        while (pb) {
            sb.push(pb);
            pb = pb->next;
        }
        ListNode* ans = nullptr;
        while(!sa.empty() && !sb.empty() && sa.top() == sb.top()){
            ans = sa.top();
            sa.pop();
            sb.pop();
        }
        return ans;
    }
};
 
总结
这道题目的题干读完就感觉很像栈的特性,就直接用着写了,没想到力扣上还没有发现这种解法。
