1.声明一个节点类
//节点类
public class Node {
int data; //数据域
Node next; //指针域
public Node(int data){
this.data=data;
}
public Node() {
}
}
2.不带头结点的单链表实现
//不带头结点的单链表
public class LinkList {
Node list;
int length;
void init(){
list = null;
length = 0;
}
void printList(){
Node p = list;
while (p != null){
System.out.print(p.data + " ");
p = p.next;
}
}
boolean insert(int k,Node node){
if(k < 1 || k > length+1){
return false;
}
//防止插入位置为1时,插入到第二个位置
if (k == 1){
node.next = list;
list = node;
length ++;
return true; //不返回下面的方法会继续执行
}
int i =1;
Node p = list;
while (i < k-1){
i ++;
p = p.next;
}
if(p == null){
return false;
}
node.next = p.next;
p.next = node;
length ++;
return true;
}
//获取元素
Node getNode(int k){
if(k<1 || k>length){
return null;
}
int i = 1;
Node p = list;
while (i<k){
i++;
p = p.next;
}
return p;
}
public static void main(String[] args) {
LinkList LL = new LinkList();
LL.init();
LL.printList();
System.out.println("插入元素:");
LL.insert(1,new Node(258));
LL.insert(2,new Node(28));
LL.insert(3,new Node(8));
LL.printList();
System.out.println();
System.out.println("获取第二个元素:");
Node node = LL.getNode(2);
System.out.println(node.data);
}
}
3.带头结点的单链表实现
//带头结点的单链表
public class HeadLinkList {
Node head;
//初始化单链表
void init(){
head = new Node();
head = new Node();
head.data = 0; //头结点存储单链表表长
head.next = null;
}
//打印单链表
void printList(){
Node p = head.next;
while (p != null){
System.out.println(p.data + " ");
p = p.next;
}
}
//插入元素
boolean insert(int k,Node node){
if(k < 1 || k > head.data + 1) {
return false;
}
int i = 0;
Node p = head;
while (i < k-1 && p !=null){
i ++;
p = p.next;
}
if(p == null){
return false;
}
node.next = p.next;
p.next = node;
head.data++;
return true;
}
//删除元素
boolean delete(int k){
if(k < 1 || k > head.data){
return false;
}
int i = 0;
Node p = head;
while (i<k-1){
i++;
p = p.next;
}
Node s = p.next;
p.next = s.next;
head.data--;
return true;
}
//获取元素
Node getNode(int k){
if(k<1 || k>head.data){
return null;
}
int i = 1;
Node p = head.next;
while (i<k){
i++;
p = p.next;
}
return p;
}
public static void main(String[] args) {
HeadLinkList headLinkList = new HeadLinkList();
headLinkList.init();
headLinkList.printList();
//插入节点
System.out.println("插入元素:");
headLinkList.insert(1,new Node(55));
headLinkList.insert(2,new Node(28));
headLinkList.insert(2,new Node(2));
//headLinkList.insert(113,new Node(3));
//删除节点
headLinkList.delete(2);
headLinkList.printList();
//获取节点
System.out.println("获取第二个节点:");
Node node = headLinkList.getNode(2);
System.out.println(node.data);
}
}
4.顺序表实现
//顺序表
public class SequenceList {
final int N = 10;
int[] a;
int n; //表长
void init(){
a = new int[N];
for (int i = 0; i < N/2; i++) {
a[i]=i+1;
n=N/2;
}
for (int i = 0; i < n; i++) {
System.out.print(a[i]+" ");
}
}
public static void main(String[] args) {
SequenceList sequenceList = new SequenceList();
sequenceList.init();
System.out.println();
System.out.println();
System.out.println("插入第一个数:");
sequenceList.insert(2,300);
System.out.println();
System.out.println("====================");
System.out.println("插入第二个数:");
sequenceList.insert(1,200);
System.out.println();
System.out.println("====================");
System.out.println("删除第4个数:"); //删除2
sequenceList.delete(4);
System.out.println();
System.out.println("====================");
System.out.println(sequenceList.getElement(5));
}
void insert(int k,int x){
if(k<1 || k>n+1){
System.out.println("插入位置有误,请重新输入!");
}
for (int i = n; i >=k; i--) {
a[i]=a[i-1];
}
a[k-1]=x;
n++;
for (int i = 0; i < n; i++) {
System.out.print(a[i]+" ");
}
}
void delete(int k){
if(k < 1 || k > n){
System.out.println("删除位置有误,请重新输入!");
}
for (int i = k; i < n ; i++) {
a[i-1] = a[i];
}
n--;
for (int i = 0; i < n; i++) {
System.out.print(a[i]+" ");
}
}
int getElement(int k){
if(k < 1 || k > n){
System.out.println("查找元素位置有误,请重新输入!");
}
return a[k-1];
}
}