LeetCode : 160. Intersection of Two Linked Lists

问题描述:

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.

分析 :

思路1:利用栈后进先出的特性,将链表元素放入栈,然后从尾开始比较,会用O(n)的空间复杂度

思路2:先求出两个链表的长度lengthA、lengthB,然后长的链表先后移使之与短的长度相同,然后开始便利,找到相同的节点。

AC代码如下:

 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
    {
        ListNode * res = NULL;
        int lengthA = 0;
        int lengthB = 0;
        ListNode *a,*b;
        a = headA;
        b = headB;
        while(a != NULL)
        {
            lengthA++;
            a = a->next;
        }
        while(b != NULL)
        {
            lengthB++;
            b = b->next;
        }
        a = headA;
        b = headB;
        int diff = abs(lengthA - lengthB);
        if(lengthA > lengthB)
        {
            for(int i = 0;i < diff;i++)
                a = a->next;
        }
        if(lengthA < lengthB)
        {
            for(int i = 0;i < diff;i++)
                b = b->next;
        }
        while(a!=NULL && b!= NULL)
        {
            if(a == b)
            {
                res = a;
                break;
            }
            a = a->next;
            b = b->next;
        }
        return res;
        
    }


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014221279/article/details/52355071
个人分类: leetcode刷题
上一篇LeetCode : 136. Single Number
下一篇LeetCode : 223. Rectangle Area
想对作者说点什么? 我来说一句

LeetCode第一题(TwoSun)

2015年09月19日 3KB 下载

C语言实现LinkedList

2013年03月21日 7KB 下载

Leetcode two sum java 解法

2014年03月13日 537B 下载

AddTwoNumbers

2017年09月08日 1KB 下载

LeetCode2 Add Two Numbers

2018年01月09日 10KB 下载

Merge two lists of ordered numbers

2012年12月13日 1KB 下载

leetcode add two numbers

2017年10月02日 4KB 下载

Two Sum leetcode c++

2015年10月01日 763B 下载

没有更多推荐了,返回首页

关闭
关闭