leetcode [Intersection of Two Linked Lists]//待整理多种解法

来源:互联网 发布:文明5美丽新世界 mac 编辑:程序博客网 时间:2024/06/10 13:34
/** * 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;    }}

0 0
原创粉丝点击