LEETCODE: Intersection of Two Linked Lists
来源:互联网 发布:女性职场歧视 知乎 编辑:程序博客网 时间:2024/06/05 03:51
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.
/** * 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; // Find the length of list A and record the last node of list A. int lenA = 1; ListNode *lastA = headA; while(lastA != NULL && lastA->next != NULL) { lenA ++; lastA = lastA->next; } // Find the length of list B and record the last node of list B. int lenB = 1; ListNode *lastB = headB; while(lastB != NULL && lastB->next != NULL) { lenB ++; lastB = lastB->next; } // No intersaction. if(lastA != lastB) return NULL; // Skip the front nodes of the longer list, then move with the same speed. // The first time the two cursors meet is the intersaction node. lastA = headA; lastB = headB; if(lenA > lenB) { lenA -= lenB; for(int ii = 0; ii < lenA; ii ++) { lastA = lastA->next; } } else { lenB -=lenA; for(int ii = 0; ii < lenB; ii ++) { lastB = lastB->next; } } while(lastA != NULL && lastB != NULL && lastA != lastB) { lastA = lastA->next; lastB = lastB->next; } return lastA; }};
0 0
- [leetcode] [leetcode]Intersection of Two Linked Lists
- 【LeetCode】Intersection of Two Linked Lists
- LeetCode: Intersection of Two Linked Lists
- [Leetcode] Intersection of Two Linked Lists
- [Leetcode]Intersection of Two Linked Lists
- LeetCode:Intersection of Two Linked Lists
- leetcode: Intersection of Two Linked Lists
- Leetcode: Intersection of Two Linked Lists
- Intersection of Two Linked Lists--leetcode
- [leetcode]Intersection of Two Linked Lists
- leetcode:Intersection of Two Linked Lists
- leetcode之Intersection of Two Linked Lists
- 【Leetcode】:Intersection of Two Linked Lists
- leetcode Intersection of Two Linked Lists
- [LeetCode]Intersection of Two Linked Lists
- leetcode: Intersection of Two Linked Lists
- 【LeetCode】Intersection of Two Linked Lists
- LeetCode Intersection of Two Linked Lists
- 影响未来十年的10项互联网新技术
- 【张孝祥并发课程笔记】07:java5原子性操作类的应用
- 鼠标相关
- 任务、进程和线程的区别(转自博客园)_繁杂琐事
- 【张孝祥并发课程笔记】08:java5线程并发库的应用
- LEETCODE: Intersection of Two Linked Lists
- boost::timer
- 史上最详细的Android Studio系列教程三--快捷键
- hdu 2795 线段树
- 【张孝祥并发课程笔记】09:Callable与Future的应用
- 20150302 N1
- struts2连接数据库实现用户登录
- 线性表线性(顺序)存储结构
- html编辑器kindeditor的使用