1、创建一个接口;
public interface ILinarList<E> {
boolean add(E item);
boolean add(int i,E item);
E remove(int i);
int indexOf(E item);
E get(int i);
int size();
void clear();
boolean isEmpty();
}
2、编程实现单链表;
import com.iscast.two.ILinarList;
public class SLinkList<E> implements ILinarList<E> {
private Node<E> start;
int size;
private static class Node<E> {
E item;
Node<E> next;
Node(E item,Node<E>next){
this.item = item;
this.next = next;
}
}
//初始化线性表
public SLinkList(){
start = null;
}
@Override
public boolean add(E item) {
if(start==null){
start=new Node<E>(item,null);
}else {
Node<E>current = start;
while (current.next!=null){
current=current.next;
}
current.next = new Node<E>(item,null);
}
size++;
return true;
}
@Override
public boolean add(int i, E item) {
Node<E> current;
Node<E> previous;
if (i<0||i>size){
return false;
}
Node<E> newnode = new Node<E>(item,null);
if (i==0){
newnode.next = start;
start = newnode;
size++;
}else {
current = start;
previous = null;
int j = 0;
while (current != null && j<i){
previous = current;
current = current.next;
j++;
}
if (j == i){
previous.next = newnode;
newnode.next = current;
size++;
}
}
return true;
}
@Override
public E remove(int i) {
E oldValue = null;
if (isEmpty()|| i<0 || i>size-1){
oldValue = null;
}
Node<E>current = start;
if (i == 0){
oldValue = current.item;
start = current.next;
size--;
}else {
Node<E> previous = null;
int j = 1;
while (current.next != null && j <= i) {
previous = current;
current = current.next;
j++;
}
previous.next = current.next;
oldValue = current.item;
current = null;
size--;
}
return oldValue;
}
@Override
public int indexOf(E item) {
int i = 0;
if(item == null){
for (Node<E>current=start;current !=null;current = current.next){
if (current.item == null)
return i;
i++;
}
}else {
for (Node<E>current=start;current !=null;current = current.next){
if (item.equals(current.item))
return i;
i++;
}
}
return -1;
}
@Override
public E get(int i) {
E item = null;
if ((isEmpty() || i < 0 || i > size - 1)) {
item = null;
}
Node<E> current = start;
int j = 0;
while (current.next != null && j<i){
current = current.next;
j++;
}
if (j == i){
item = current.item;
}
return item;
}
@Override
public int size() {
return size;
}
@Override
public void clear() {
for (Node<E>current = start;current !=null;){
Node<E>next = current.next;
current.item = null;
current.next = null;
current = next;
}
start = null;
size = 0;
}
@Override
public boolean isEmpty() {
return size == 0;
}
}
3.测试单链表;
import com.iscast.two.ILinarList;
import com.iscast.two.SeqList;
import java.util.Scanner;
public class TestList {
public static void main(String[] args) {
ILinarList<Integer> list =new SLinkList<Integer>();
int[] data={23,45,3,7,6,945};
Scanner sc = new Scanner(System.in);
System.out.println("-------------------------");
System.out.println("操作选项菜单");
System.out.println("1、添加元素");
System.out.println("2、插入元素");
System.out.println("3、删除元素");
System.out.println("4、定位元素");
System.out.println("5、取表元素");
System.out.println("6、显示线性表");
System.out.println("0、退出");
System.out.println("-------------------------");
char ch;
do{
System.out.println("请输入操作选项:");
ch=sc.next().charAt(0);
switch (ch){
case '1':
for (int i=0;i<data.length;i++) {
list.add(data[i]);
}
System.out.println("添加操作成功");
break;
case '2':
System.out.println("请输入要插入的位置:");
int loc=sc.nextInt();
System.out.println("请输入要插入的值:");
int num=sc.nextInt();
list. add(loc-1,num);
System.out.println("插入操作成功!");
break;
case '3':
System.out.println("请输入要删除的值:");
loc=sc.nextInt();
list.add(loc-1);
System.out.println("删除操作成功!");
break;
case '4':
System.out.println("请输入要查找的元素:");
num = sc.nextInt();
System.out.println(num+"在列表中的位置为:"+(list.indexOf(num)+1));
break;
case '5':
System.out.println("请输入要查找元素的位置:");
loc = sc.nextInt();
System.out.println(loc+"位置上的元素为:"+(list.indexOf(loc)-1));
break;
case '6':
System.out.println("线性表中的元素有:");
for (int i=0;i<list.size();i++){
System.out.println(list.get(i)+" ");
}
System.out.println();
break;
}
}while (ch!='0');
sc.close();
}
}
4、运行结果
已经完了,点个赞鼓励一下吧!!!!!!