LeetCode(39)-Intersection of Two Linked Lists
2016-04-10 21:14
447 查看
听歌曲初爱有感:
开头啰嗦两句,刚在做算法题目的时候,听到了杨宗纬的《初爱》,突然有了一种本科时候的感觉,想想自己现在研二了,青春喂了狗,我果断喝了一罐啤酒,循环这首歌到吐…..题目:
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.
思路:
首先这道题目的意思是判断两条链表是不是有重叠的部分,如果有返回那个交叉的节点,如果没有返回null这道题目的思路是:如果有交叉,最后肯定有相同的部分,如上面那样
举个例子,a和b两头链条,a.length = 7,b.length = 5,用两个指针listA和listB,分别指向a和b的head,listA往后两个,开始listA和listB同步往后移动开始比较,有相同的就有交叉,返回那个节点
-
代码:
/** * 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) { ListNode a = headA;; ListNode b = headB;; int lengthA = 0; int lengthB = 0; int n = 0; while(a != null){ a = a.next; lengthA++; } while(b != null){ b = b.next; lengthB++; } if(lengthA > lengthB){ n = lengthA - lengthB; a = headA; b = headB; while( n > 0){ n--; a = a.next; } }else{ n = lengthB -lengthA; a = headA; b = headB; while(n > 0){ n--; b = b.next; } } while(a != b){ a = a.next; b = b.next; } return a; } }
相关文章推荐
- Loader(浅水区)
- 架构师重构代码的12条军规
- 习题9—10建立订货系统的用例模型
- Hibernate---注解
- 使用字符串资源
- 贪心总结
- ## stm32(ARM)库函数版 2 ##
- 优雅降级和渐进增强
- leetcode编程题(2)Add Two Numbers
- 提高你使用android studio的效率之键盘篇
- Kaldi使用笔记
- Linux下MySQL导入导出数据
- 大型广告系统架构 — 检索模块
- android自定义view属性
- 1008 猜数字
- TextView高级使用:SpannableString
- Apache CXF实现的SOAP形式的webservices
- 虚析构的作用
- “无法启动应用程序,管道的另一端没有任何进程”
- Android WebView 使用过程中遇到的问题与总结