Intersection of Two Linked Lists
来源:互联网 发布:淘宝代运营销售话术 编辑:程序博客网 时间:2024/06/04 08:46
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.
可以将A,B两个链表看做两部分,交叉前与交叉后。
交叉后的长度是一样的,因此交叉前的长度差即为总长度差。
只要去除这些长度差,距离交叉点就等距了。
为了节省计算,在计算链表长度的时候,顺便比较一下两个链表的尾节点是否一样,
若不一样,则不可能相交,直接可以返回NULL
就是长的链表开始多走 (h1的数量 - h2的数量)步,然后和短链表同步往下走,遇到的第一个相同的节点就是最早的公共节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if(headA==NULL||headB==NULL) return NULL; ListNode* t1=headA; ListNode* t2=headB; int len1=1,len2=1; while(t1->next!=NULL) { t1=t1->next; len1++; } while(t2->next!=NULL) { t2=t2->next; len2++; } if(len1>len2) { for(int i=0;i<(len1-len2);i++) { headA=headA->next; } } else if(len2>len1) { for(int i=0;i<(len2-len1);i++) { headB=headB->next; } } while(headA!=headB) { headA=headA->next; headB=headB->next; } return headA; }};
0 0
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- json详细介绍(for Java)
- Android调用照相机拍照
- iOS 使用UIImagePickerController
- Grails mac 下入门教程
- EasyUI服务端分页
- Intersection of Two Linked Lists
- java命令执行jar包的方式
- C#中StringBuilder类的使用总结
- Eclipse生成javadoc方法与错误解决
- msysgit安装
- hdu 1166 敌兵布阵(线段树)
- 意淫设定时间系统de实现—由订外卖想到的
- linux 软件磁盘阵列 RAID
- 七月算法--算法基础班01摘要