【LeetCode從零單排】No.160 Intersection of Two Linked Lists
題目
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return
null
. - The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
題目要求取兩個連結串列的交點,而且時間複雜度必須是O(n),所以就不能用巢狀迴圈的方法。用瞭如下方法,先計算兩個連結串列的各自長度,將長連結串列節點向下移動兩連結串列長度差,再計算。
程式碼
/**
* 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 Aindex_length=getLength(headA);
int Bindex_length=getLength(headB);
int dis=Math.abs(Aindex_length-Bindex_length);
ListNode Aindex=headA;
ListNode Bindex=headB;
if(Aindex_length>=Bindex_length){
for(int i=0;i<dis;i++){
Aindex=Aindex.next;
}
while(Bindex!=null){
if(Aindex.val==Bindex.val){return Aindex;}
else{
Aindex=Aindex.next;
Bindex=Bindex.next;
}
}
}
Aindex=headA;
Bindex=headB;
if(Aindex_length<Bindex_length){
for(int i=0;i<dis;i++){
Bindex=Bindex.next;
}
while(Aindex!=null){
if(Aindex.val==Bindex.val){return Aindex;}
else{
Aindex=Aindex.next;
Bindex=Bindex.next;
}
}
}
return null;
}
public int getLength(ListNode head){
ListNode index=head;
int length=1;
while(index.next!=null){
index=index.next;
length++;
}
return length;
}
}
/********************************
* 本文來自部落格 “李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
相關文章
- [leetCode][003] Intersection of Two Linked ListsLeetCode
- Leetcode-Intersection of Two Linked ListsLeetCode
- Leetcode 160. Intersection of Two Linked ListsLeetCode
- 【Leetcode】160. Intersection of Two Linked ListsLeetCode
- 【LeetCode從零單排】No 114 Flatten Binary Tree to Linked ListLeetCode
- LeetCode 350 [Intersection of Two Array II]LeetCode
- Leetcode Merge Two Sorted ListsLeetCode
- 【LeetCode從零單排】No38.CountAndSayLeetCode
- leetcode 350. Intersection of Two Arrays IILeetCode
- 349. Intersection of Two Arrays--LeetCode RecordLeetCode
- Leetcode 21 Merge Two Sorted ListsLeetCode
- Leetcode-Merge Two Sorted ListsLeetCode
- Merge Two Sorted Lists leetcode javaLeetCodeJava
- 【LeetCode從零單排】No.7 Reverse IntegerLeetCode
- 【LeetCode從零單排】No20.ValidParenthesesLeetCode
- 【LeetCode從零單排】No19.RemoveNthNodeFromEndofListLeetCodeREM
- 【LeetCode從零單排】No21.MergeTwoSortedListsLeetCode
- 【LeetCode從零單排】No27.Remove ElementLeetCodeREM
- 【LeetCode從零單排】No28 Implement strStr()LeetCode
- 【LeetCode從零單排】No22.Generate ParenthesesLeetCode
- LeetCode 21. Merge Two Sorted ListsLeetCode
- leetcode21_Merge Two Sorted ListsLeetCode
- 【LeetCode從零單排】No58.Length of Last WordLeetCodeAST
- 【LeetCode從零單排】No67.AddBinaryLeetCode
- 【LeetCode從零單排】No70.ClimbingStairsLeetCodeAI
- 【LeetCode從零單排】No.9 Palindrome NumberLeetCode
- 【LeetCode從零單排】No14.LongestCommonPrefixLeetCode
- 【LeetCode從零單排】No36 Valid SudokuLeetCode
- 【LeetCode從零單排】No221.Maximal SquareLeetCode
- 350. Intersection of Two Arrays II--LeetCode RecordLeetCode
- LeetCode 第 21 題 (Merge Two Sorted Lists)LeetCode
- 【LeetCode從零單排】No15 3SumLeetCode
- 【LeetCode從零單排】No189 .Rotate ArrayLeetCode
- 【LeetCode從零單排】No88.Merge Sorted ArrayLeetCode
- Mysql從零單排-1MySql
- 【LeetCode從零單排】No96 Unique Binary Search TreesLeetCode
- 【LeetCode從零單排】No112 Path SumLeetCode
- 【LeetCode從零單排】No.169 Majority Element(hashmap用法)LeetCodeHashMap