/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//解法一:时间是O(Max(m,n)),但是辅助空间是O(Max(m,n)),而不是O(1)
//既然要找两个列表共用的第一个结点,那么就从两个列表的最后一个结点开始比较,不能反序(因为题目要求原来的两个列表的结构不能改变),那么就用两个栈来存储
ListNode res = null;
ListNode shiftA = headA;
ListNode shiftB = headB;
Stack<ListNode> stackA = new Stack<>();
Stack<ListNode> stackB = new Stack<>();
while(shiftA != null){
stackA.push(shiftA);
shiftA = shiftA.next;
}
while(shiftB != null){
stackB.push(shiftB);
shiftB = shiftB.next;
}
while(!stackA.isEmpty() && !stackB.isEmpty()){
shiftA = stackA.pop();
shiftB = stackB.pop();
if(shiftA == shiftB){
res = shiftA;
}
}
return res;
}
}
leetcode [Intersection of Two Linked Lists]//待整理多种解法
最新推荐文章于 2020-12-24 13:01:16 发布