JAVA数据结构——单链表的操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单链表的操作方法一:

package ch02;

(1)建立结点类Node.java

public class Node {

public Object data;//存放结点数据值

public Node next;//存放后继结点

//无参构造函数

public Node(){

this(null,null);

}

//只有结点值的构造函数

public Node(Object data){

this(data,null);

}

//带有节点值和后继结点的构造函数

public Node(Object data,Node next){ this.data=data;

this.next=next;

}

}

(2)建立链表及操作LinkList.java

package ch02;

import java.util.Scanner;

public class LinkList implements IList{

public Node head;//单链表的头指针

//构造函数初始化头结点

public LinkList(){

head=new Node();

}

//构造函数构造长度为n的单链表

public LinkList(int n,boolean Order) throws Exception{ this();

if(Order)

create1(n); //头插法顺序建立单链表

else

create2(n); //尾插法逆序建立单链表

}

//头插法顺序建立单链表

public void create1(int n) throws Exception{

Scanner sc=new Scanner(System.in);

System.out.println("请输入结点的数据(头插法):");

for(int i=0;i

insert(0,sc.next());

}

}

//尾插法逆序建立单链表

public void create2(int n) throws Exception{

Scanner sc=new Scanner(System.in);

System.out.println("请输入结点的数据(尾插法):");

for(int i=0;i

insert(length(),sc.next());

}

}

//将链表置空

public void clear(){

head.data=null;

head.next=null;

}

//判断链表是否为空

public boolean isEmpty(){

return head.next==null;

}

//返回链表长度

public int length(){

Node p=head.next;

int length=0;

while(p!=null){

p=p.next;

length++;//返回P不空长度length加1

}

return length;

}

//读取并返回第i个位置的数据元素

public Object get(int i) throws Exception { Node p=head.next;

int j;

//从首结点开始向后查找,直到p指向第i个结点或者p为null for(j=0;j

p=p.next;

}

if(j>i||p==null)//i不合法时抛出异常

throw new Exception("第"+i+"个数据元素不存在");

return p.data;

}

//插入x作为第i个元素

public void insert(int i, Object x) throws Exception{ Node p=head;

int j=-1;

//寻找第i个结点的前驱i-1

while(p!=null&&j

p=p.next;

j++;

}

if(j>i-1||p==null)//i不合法时抛出异常

throw new Exception("插入位置不合法");

Node s=new Node(x);

s.next=p.next;

p.next=s;

}

//删除第i个元素

public void remove(int i) throws Exception{ Node p=head;

int j=-1;

while(p!=null&&j

j++;

}

if(j>i-1||p.next==null)

throw new Exception("删除位置不合法");

p.next=p.next.next;

}

//返回元素x首次出现的位序号

public int indexOf(Object x) {

Node p=head.next;

int j=0;

while(p!=null&&!p.data.equals(x)){

p=p.next;

j++;

}

相关文档
最新文档