问题描述:
寻找循环链表的头结点。
思路分析:
寻找头节点,就要记录以前找过的结点,故我们使用hash表来记录结点,如果遇到重复,则直接返回即可。
代码见下:
结点类定义
package List;
class Node{
int data;
Node next;
public Node(int data) {
this.data = data;
}
}
实现类定义:
package List;
import java.util.HashSet;
public class Lbqd {
//寻找环形链表起点
public static Node lbstart(Node first)
{
Node p=first;
HashSet hashSet=new HashSet();//建立hash表
while (true) {
if (hashSet.contains(p)) return p;
else {
hashSet.add(p);
p=p.next;
}
}
}
public static void main(String[] args) {
Node first=new Node(1);
first.next=new Node(2);
first.next.next=new Node(3);
first.next.next.next=first;
Node res= lbstart(first);
System.out.println(res.data);
}
}
运行结果见下: