首先定义一个节点类,有两个成员变量:val和next,以及一个构造函数:
/*
* 单链表非数组实现
*/
public class ListNode {
ListNode next;
int val;
ListNode(int val){
this.val = val;
this.next = null;
}
}
单链表最常用的两个方法就是插入和删除:
public static void main(String[] args) {
SingleLinkedList LinkedList = new SingleLinkedList();
ListNode head = new ListNode(0);
LinkedList.insert(head,1,0);
LinkedList.insert(head,2,0);
LinkedList.insert(head,3,0);
LinkedList.insert(head,4,0);
LinkedList.insert(head,2,1);
LinkedList.insert(head,2,2);
ListNode p = head;
while(p != null){
System.out.print(p.val+" ");
p = p.next;
}
System.out.println();
LinkedList.delete(head,8);
while(head != null){
System.out.print(head.val+" ");
head = head.next;
}
}
//在第i个元素后插入节点
public void insert(ListNode head,int i,int val){
ListNode tail = head;
int j = 0;
while(tail != null){
j++;
if(i == j){
ListNode node = new ListNode(val);
ListNode tailnext = tail.next;//第i个元素后一个节点
tail.next = node;//插入新的节点
node.next = tailnext;
break;
}
tail = tail.next;
}
if(i>j){
System.out.println("超过表长");
}
}
//删除第i个元素
public void delete(ListNode head,int i){
ListNode tail = head;
int j = 0;
while(tail != null){
j++;
if(j == i-1){
if(tail.next != null){
tail.next = tail.next.next; //删除第i个元素
}else{//如果超过表长
System.out.print("超过表长");
}
break;
}
tail = tail.next;
}
}