leetcode142:环形链表2

package com.mxnet;

import java.util.HashSet;

public class Solution142 {

    public static void main(String[] args) {

        String convert = convert("435252526261");
        System.out.println(convert);

    }

    /**
     * 给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
     *
     * @param head
     * @return 思路:
     * 1. 利用hash结构的元素不重复特性
     * 2. 将链表所有元素全部添加到hash集合中
     * 3. 在添加过程中,若出现添加元素失败的情况,说明元素重复,即出现带环的情况
     * 4. 直接返回该节点
     * 5. 若全部添加成功,说明该链表无环
     */
    public ListNode detectCycle(ListNode head) {
        //创建hash集合存放链表所有节点
        HashSet<ListNode> listNodes = new HashSet<>();
        //遍历所有节点将其添加到hash集合
        while (head != null) {
            //若添加失败,则说明有重复元素,即带环,返回该元素
            if (!listNodes.add(head)) {
                return head;
            }
            //链表指针后移
            head = head.next;
        }
        //若遍历完所有节点全部不重复,说明无环
        return null;
    }

    /**
     * 将数字字符串金额转换为加 , 形式
     * 例如  12345678  ---> 12,345,678
     * @param number
     * @return
     */
    public static String convert(String number) {
        if (number == null || number == ""){
            return "";
        }
        if (number.length() <= 3) {
            return number;
        }
        String newNumber = "";
        int j = 0;
        for (int i = number.length() - 1; i >= 0; i--) {
            if (j % 3 == 0) {
                newNumber = number.charAt(i) + "," + newNumber;
            } else {
                newNumber = number.charAt(i) + newNumber;
            }
            j++;
        }
        return newNumber.substring(0, newNumber.length() - 1);

    }

}
posted @ 2022-08-27 20:34  mx_info  阅读(18)  评论(0)    收藏  举报