【LeetCode】Intersection of Two Linked Lists

来源:互联网 发布:分水岭算法原理 编辑:程序博客网 时间:2024/05/18 03:09

题目

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.
解答

题目要求两个单链表相交的第一个节点,可以通过遍历第一个链表,计算长度len1, 保存最后一个节点,再遍历第二个链表,计算长度len2,同时检查最后一个节点是否相同,之后再从头遍历两链表,(若len1>len2),链表一先遍历len1-len2个节点,之后同时遍历到相同的节点即可,代码如下:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if(headA==null||headB==null){            return null;        }        int len1=0;        ListNode h1=headA;        while(h1.next!=null){  //注意是.next            h1=h1.next;            len1++;        }        int len2=0;        ListNode h2=headB;        while(h2.next!=null){            h2=h2.next;            len2++;        }        ListNode n1=headA;        ListNode n2=headB;        if(len1>len2){            int k=len1-len2;            while(k-->0){                n1=n1.next;            }        }else{            int k=len2-len1;            while(k-->0){                n2=n2.next;            }        }        /* or        while(n1!=n2){n1=n1.next;n2=n2.next;        }        return n1;        */        while(n1!=null&&n2!=null){            if(n1==n2){                return n1;            }            n1=n1.next;            n2=n2.next;        }        return null;    }}

---EOF---


0 0
原创粉丝点击