码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode160.相交链表

时间:2018-10-12 16:02:11      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:def   ret   link   lse   tin   交点   linked   时间复杂度   solution   

编写一个程序,找到两个单链表相交的起始节点。

 

例如,下面的两个链表:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

在节点 c1 开始相交。

 

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
    /**
     * 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 lenA = len(headA);
            int lenB = len(headB);
            if (lenA>lenB) {
                while (lenA != lenB) {
                    headA = headA.next;
                    lenA--;
                }
            } else {
                while (lenA != lenB) {
                    headB = headB.next;
                    lenB--;
                }
            }
            while (headA != headB) {
                headA = headA.next;
                headB = headB.next;
            }
            
            return headA;
        }
        private int len(ListNode headA) {
            int len = 0;
            while (headA != null) {
                headA = headA.next;
                len++;
            }
            return len;
        }
    }

     

LeetCode160.相交链表

标签:def   ret   link   lse   tin   交点   linked   时间复杂度   solution   

原文地址:https://www.cnblogs.com/airycode/p/9778224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!