package 链表中的查找算法;
import java.util.Scanner;
public class LinkFind {
public static void main(String[] args) {
Type node, head = null;
String key;
Scanner sc = new Scanner(System.in);
System.out.print("链表测试!\n 先输入链表中的 数据\n");
do {
System.out.print("输入添加的节点:(学号,姓名 年龄)");
Data data = new Data();
data.key = sc.next();
if (data.key.equals("0")) {
break;
} else {
Type t = new Type();
data.name = sc.next();
data.age = sc.nextInt();
head = t.Add(head, data);
}
} while (true);
head.All(head);
System.out.print("\n演示在链表中查找,输入查找关键字:");
key = sc.next();
node = head.find(head, key);
if (node != null) {
Data nodeData = node.Notedata;
System.out
.println("关键字" + key + "对应的节点为:(" + nodeData.key + " " + nodeData.name + " " + nodeData.age + ")");
} else {
System.out.print("在链表中未找到关键字为" + key + " 的节点!\n");
}
}
}
class Data {
String key;
String name;
int age;
}
class Type {
Data Notedata = new Data();
Type nextNode;
Type Add(Type head, Data Notedata) {
Type node, htemp;
node = new Type();
node.Notedata = Notedata;
node.nextNode = null;
if (head == null) {
head = node;
return head;
}
htemp = head;
while (htemp.nextNode != null) {
htemp = htemp.nextNode;
}
htemp.nextNode = node;
return head;
}
Type find(Type head, String key) {
Type htemp;
htemp = head;
while (htemp != null) {
if (htemp.Notedata.key.equals(key)) {
return htemp;
}
htemp = htemp.nextNode;
}
return null;
}
int length(Type head) {
Type htemp;
int len = 0;
htemp = head;
while (htemp != null) {
len++;
htemp = htemp.nextNode;
}
return len;
}
void All(Type head) {
Type htemp;
Data Notedata;
htemp = head;
System.out.print("当前链表共有" + length(head) + "个节点,链表所有数据如下:\n");
while (htemp != null) {
Notedata = htemp.Notedata;
System.out.println("节点(" + Notedata.key + "" + Notedata.name + "" + Notedata.age + ")");
htemp = htemp.nextNode;
}
}
}
