Intersection of Two Linked Lists

原创 2016年06月01日 11:14:35
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

(1)当没有相交节点的情况下:

假设A链表长度为m,B链表长度为n。则在循环进行(m+n)次后指针p和q都指向了NULL。这个时候循环退出,返回p=NULL.

(2)当两个链表有相同交点的时候:

设A和B公共部分链表的长度为m,A链表head节点距离相交节点的长度为x,B链表head节点距离相交节点的长度为y,则在循环经历了(x+y+m)次之后两者必定在公共第一个公共节点处相等。返回p,相等的节点即为题目所求。

/**
 * 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) {
        ListNode *p=headA,*q=headB;
        while(p!=q)
        {
            p=p?p->next:headB;
            q=q?q->next:headA;
        }
        return p;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode-面试算法经典-Java实现】【160-Intersection of Two Linked Lists(单链表的交集)】

【160-Intersection of Two Linked Lists(单链表的交集)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Write a program ...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月22日 06:45
  • 3188

Intersection of Two Arrays II两个数组交集(重要!)

https://leetcode.com/problems/intersection-of-two-arrays-ii/ Given two arrays, write a function ...
  • gao1440156051
  • gao1440156051
  • 2016年06月26日 23:21
  • 1462

Intersection of Two Linked Lists 判断两个单链表里边有没有重叠,返回重叠的第一个节点

Write a program to find the node at which the intersection of two singly linked lists begins. For ...
  • chenyx90
  • chenyx90
  • 2016年01月02日 17:14
  • 350

leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)

leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)...
  • mine_song
  • mine_song
  • 2017年03月14日 15:04
  • 147

C++实现单链表(Singly-Linked List)追加、遍历、删除

#include using namespace std; struct Node { int data; struct Node* next; }; class List { Node* ...
  • wupeak
  • wupeak
  • 2015年01月27日 00:13
  • 644

C++:实现LinkedList 学习抽象数据类型

C++:实现LinkedList 学习抽象数据类型标签(空格分隔): c++ 数据结构 作者:陈小默C实现LinkedList 学习抽象数据类型 定义需求 作为类 作为List 作为栈stack 作...
  • qq_32583189
  • qq_32583189
  • 2016年09月04日 17:36
  • 3319

Intersection of Two Arrays(两数组的交叉元素)

Given two arrays, write a function to compute their intersection.(给定两个数组,计算它们的交叉元素)Example: Given n...
  • ajiangfan
  • ajiangfan
  • 2016年09月26日 11:40
  • 234

Java 集合深入理解(11):LinkedList

点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情鱼肚白,来学学 LinkedList 吧! 日常开发中,保存一组数据使用的最多的就是 ArrayList, 其...
  • u011240877
  • u011240877
  • 2016年10月20日 20:15
  • 3106

Two Sigma面试专题

前段时间过了Two Sigma的第一轮HR面后,就一直没有管,最近准备把Two Sigma的OA做了,不过还是提前准备下,从网上找了几道面经,准备写一写,尽量能过OA面吧,如果过了,下一轮就是技术电话...
  • u012290414
  • u012290414
  • 2015年07月25日 04:56
  • 5540

erlang lists模块函数使用大全

一,带函数Pred 1, all(Pred, List) -> boolean() 如果List中的每个元素作为Pred函数的参数执行,结果都返回true,那么all函数返回true, 否则返回...
  • nadakiss
  • nadakiss
  • 2014年04月01日 09:05
  • 5583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Intersection of Two Linked Lists
举报原因:
原因补充:

(最多只允许输入30个字)