LeetCode 160 : Intersection of Two Linked Lists (Java)
2015-11-30 20:24
465 查看
解题思路:一开始想通过反转链表来做,可发现要求不能改变原来的链表结构,当然反转也可以,大不了再转回来,麻烦。比较简单的做法就是考虑到题目的意思是两个链表要有交叉肯定是在从两个链表相同元素位置一直持续到结尾,所以可以先获得两个链表的长度,使较长的链表先移动到剩下的和较短的链表长度相同,这要就可以同步移动两个链表来比较了。有个注意点是题目中两个元素交叉是指这Node相等,而不是只是Node的值相等。
/** * 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) { if(headA == null || headB == null) { return null; } int countA = 0; int countB = 0; ListNode curA = headA; ListNode curB = headB; while(curA != null) { countA ++; curA = curA.next; } while(curB != null) { countB ++; curB = curB.next; } if(curA != curB) return null; int count = 0; if(countA >= countB) { count = countA - countB; curA = headA; curB = headB; } else { count = countB - countA; curA = headB; curB = headA; } while(count != 0) { curA = curA.next; count --; } while(curA != null && curA != curB) { curA = curA.next; curB = curB.next; } return curA; } }
相关文章推荐
- 解析Java中的队列和用LinkedList集合模拟队列的方法
- JAVA LinkedList和ArrayList的使用及性能分析
- 浅谈 java中ArrayList、Vector、LinkedList的区别联系
- LinkedList学习示例模拟堆栈与队列数据结构
- 关于JDK1.7中LinkedList索引方法的思考
- ArrayList和LinkedList的主要区别
- Java数据结构-线性表之单链表LinkedList
- ARRAYLIST VECTOR LINKEDLIST 区别与用法(2014-10-14)
- Remove Duplicates from Sorted List II
- Reverse Linked List
- Reverse Linked List II
- Partition List
- android性能之List
- Remove Nth Node From End of List
- Remove Duplicates from Sorted List
- Merge Two Sorted Lists
- ArrayList Vector LinkedList 区别与用法
- 黑马程序员————List集合概述、Arrayist集合、Vector集合、LinkedList集合简述
- 单向链表LinkedList的使用
- [Leetcode题解]002 Add Two Numbers