package dataStructure;
/**
* 结点类,进行结点内容的保存
* @author
*/
public class Node {
public Object data; //存放结点
public Node next; //后继结点
public Node() {
this(0, null);
}
public Node(Object num) {
this(num, null);
}
public Node(Object num, Node next) {
this.data = num;
this.next = next;
}
}
package dataStructure;
import java.util.Scanner;
public class LinkList {
private Scanner input = new Scanner(System.in);
public Node head; //头结点
public LinkList() { //单链表构造方法
head = new Node(); //初始化头结点
}
public LinkList(int num, boolean Order) { //构造一个长度为n的单链表
this(); //初始化头结点
try {
if( Order )
createOfTial( num );
else
createOfHead( num );//头插法
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void createOfHead(int num) throws Exception{
int i = 0;
for(i = 0; i < num; i++){
insert(lenght(), input.next());
}
}
public void createOfTial(int num ) throws Exception{
int i = 0;
for(i = 0; i < num; i++){
insert(lenght(), input.next());
}
}
public void clear(){//清空链表
head.next = null;
head.data = null;
}
public boolean isEmpty(){ //判断带头节点的单链表是否为空
return head.next == null;
}
public int lenght(){//求带头结点的单链表的长度
Node p = head.next;//头指针
int lenght = 0;//计数
while(p != null){//指向后继结点
p = p.next;
++lenght;
}
return lenght;//返回长度
}
public int get(int findNum){ //读取带头结点的单链表的第I个元素
return 0;
}
public void insert(int i, Object num) throws Exception {//在第i个元素前插入一个值为x的新结点
Node p = head;//初始化p为头结点,j为计数器
int j = -1;
while( p != null && j < i - 1){
p = p.next;
++j;
}
if(j > i - 1 || p == null)//越界
throw new Exception("越界的插入,失败");//抛出异常
Node s = new Node(num);//生成新结点
s.next = p.next;
p.next = s;
}
public void remove(int i) throws Exception{ //删除结点
Node p = head.next;
int j = -1;
while(p.next != null && j < i - 1){
p = p.next;
j++;
}
if(j > i - 1 || p.next == null){
throw new Exception("删除位置不合法");
}
p.next = p.next.next;
}
public int indexOf(Object num){ //查找值为x的结点
Node p = head.next;//初始化指针
int j = 0;
while(p != null && !p.data.equals(num)){
p = p.next;
j++;
}
if(p != null)//寻找成功,返回位置
return j;
else
return -1;
}
public void display(){//输出链表
Node node = head.next;//取有效的结点
while(node != null){
System.out.println("node.data is " + node.data);
node = node.next;
}
System.out.println();
}
}
package dataStructure;
import java.util.Scanner;
public class TestLinkList {
@SuppressWarnings("resource")
public static void main(String[] args){
int n = 10;
LinkList L = new LinkList();//创建链表
int i = 0;
for(i = 0; i < n; i++)
try {
L.insert(i, i);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("请输入i的值:");
int j = new Scanner(System.in).nextInt();
if(0 < j && j < n)
System.out.println("第" + j + "个元素的前驱结点是:" + L.indexOf(j - 1));
else
System.out.println("您所查找的结点不存在");
}
}