算法-链表篇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;
}
};
总结
这道题目的题干读完就感觉很像栈的特性,就直接用着写了,没想到力扣上还没有发现这种解法。