• Linked List Cycle II


    1. Title

    Linked List Cycle II

    2. Http address

    https://leetcode.com/problems/linked-list-cycle-ii/

    3. The question

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

    Note: Do not modify the linked list.

    Follow up:
    Can you solve it without using extra space?

     4. My code(AC)

    •  1  // Accepted
       2        public static ListNode detectCycle(ListNode head) {
       3            
       4            if( head == null)
       5                return null;
       6            ListNode last ,pre;
       7            last = head;
       8            pre = head.next;
       9            
      10            if( pre == last)
      11                return head;
      12            while( pre != null)
      13            {
      14                if( pre == last)
      15                {
      16                    break;
      17                }
      18                last = last.next;
      19                pre = pre.next;
      20                if( pre != null)
      21                {
      22                    pre = pre.next;
      23                }else{
      24                    pre = null;
      25                }
      26            }
      27            
      28            if ( pre == null)
      29            {
      30                return null;
      31            }
      32            ListNode second = pre.next;
      33            ListNode first = head;
      34            pre.next = null;
      35            
      36            int lenA,lenB;
      37           
      38            ListNode p = first;
      39            lenA = 0 ;
      40            while( p != null)
      41            {
      42                lenA++;
      43                p = p.next;
      44            }
      45            lenB = 0 ;
      46            p = second;
      47            while( p != null)
      48            {
      49                lenB++;
      50                p = p.next;
      51            }
      52            
      53            if( lenA >= lenB)
      54            {
      55                int dis = lenA - lenB;
      56                while( dis > 0 && first != null)
      57                {
      58                    first = first.next;
      59                    dis--;
      60                }
      61                
      62            }else{
      63                int dis = lenB - lenA;
      64                while( dis > 0 && second != null)
      65                {
      66                    second = second.next;
      67                    dis--;
      68                }
      69            }
      70            
      71            while( first != null && second != null && first != second)
      72            {
      73                first = first.next;
      74                second = second.next;
      75            }
      76            return second;
      77            
      78          
      79         }
     
     
  • 相关阅读:
    Sqlite—修改语句(Update)
    Python—图形界面开发
    Django—模型
    Sqlite—删除语句(Delete)
    Shell—详解$( )、$(( ))、``与${ }的区别
    Shell—详解$0、$1、$2、$#、$*、$@、$?、$$变量
    排名靠前的博客
    系统架构--逻辑层
    互联网系统的通用架构笔记
    各类开源协议总结
  • 原文地址:https://www.cnblogs.com/ordili/p/4970027.html
Copyright © 2020-2023  润新知