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);
}
}