LeetCode-Easy部分中标签为LinkedList 160. Intersection of Two Linked Lists

来源:互联网 发布:淘宝网店模块 编辑:程序博客网 时间:2024/05/16 12:41

原题

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 → b3begin 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.

题目分析

求2个链表的交集所在的节点。注意题目中给出的注意事项。

代码实现

       public ListNode GetIntersectionNode(ListNode headA, ListNode headB)        {            if (headA == null || headB == null)                return null;            ListNode a = headA;            ListNode b = headB;            while (a!= b)            {                if (a == null)                    a = headB;                else                {                    a = a.next;                }                if (b == null)                    b = headA;                else                {                    b = b.next;                }            }            return a;        }

说实话这个代码不是非常好理解。我们做一个模拟看一下,到底这个算法的意思是什么。

        static void Main(string[] args)        {            SolutionLinkedList s = new SolutionLinkedList();            ListNode headA = s.CreateLinkList(new int[] { 1, 2, 35,6 });            ListNode headB = headA.next;            ListNode interNode = s.GetIntersectionNode(headA, headB);            Console.ReadLine();        }


这里写图片描述
程序比较的过程

更多LinkList题目

http://blog.csdn.net/daigualu/article/details/69077428

1 0
原创粉丝点击