【LeetCode从零单排】No.160 Intersection of Two Linked Lists
来源:互联网 发布:js视频教程 百度云 编辑:程序博客网 时间:2024/06/02 21:02
题目
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; }}
代码下载:https://github.com/jimenbian/GarvinLeetCode
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/
0 0
- 【LeetCode从零单排】No.160 Intersection of Two Linked Lists
- Leetcode NO.160 Intersection of Two Linked Lists
- LeetCode--No.160--Intersection of Two Linked Lists
- leetcode 160-Intersection of Two Linked Lists
- leetcode 160: Intersection of Two Linked Lists
- LeetCode(160) Intersection of Two Linked Lists
- [leetcode 160] Intersection of Two Linked Lists
- leetCode #160 Intersection of Two Linked Lists
- LeetCode(160) Intersection of Two Linked Lists
- LeetCode[160]Intersection of Two Linked Lists
- [LeetCode 160]Intersection of Two Linked Lists
- [LeetCode][160][Intersection of Two Linked Lists ]
- leetcode-160 Intersection of Two Linked Lists
- leetcode 160Intersection of Two Linked Lists
- LeetCode 160 :Intersection of Two Linked Lists
- leetcode[160]:Intersection of Two Linked Lists
- leetcode-160-Intersection of Two Linked Lists
- [Leetcode 160] Intersection of Two Linked Lists
- Java WebService例子--------调用www.36wu.com查询IP地址
- Android AlertDialog
- TCP协议中的三次握手和四次挥手(图解)
- Android 一些小认识
- 自定义AlertDialog,加入EditText控件无法弹出键盘
- 【LeetCode从零单排】No.160 Intersection of Two Linked Lists
- Dom4j
- 《java解惑》——循环谜题
- leetCode #110 Balanced Binary Tree
- 安装chrome插件Advanced Rest Client来调试RESTFul
- Qt Style 字体字号等
- Effective-Objective-C-读书笔记-Item-1
- Log 中dalvikvm 信息解析
- 适合做选择分支或者提醒的部分---MessageBox