public class IndexException extends RuntimeException{
public IndexException() {
}
public IndexException(String msg) {
super(msg);
}
}
public class MySingleList {
static class ListNode {
public int val;
public ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public ListNode head;//null 链表的头结点
//头插法
public void addFirst(int data){
ListNode node = new ListNode(data);
node.next = this.head;
this.head = node;
};
//尾插法
public void addLast(int data){
ListNode node = new ListNode(data);
if (head == null) {
head = node;
}else {
ListNode cur = head;
while(cur .next != null) {
cur = cur.next;
}
cur.next = node;
}
};
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data){
if (index < 0 || index > size()) {
throw new IndexException("index不合法:" + index);
}
ListNode node = new ListNode(data);
if(head == null) {
head = node;
return;
}
if(index == 0) {
addFirst(data);
return;
}
//中间插入
ListNode cur = head;
int count = 0;
while (count != index -1) {
cur = cur.next;
count++;
}
node.next = cur.next;
cur.next = node;
};
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key){
ListNode cur = head;
while (cur != null) {
if (cur.val == key) {
return true;
}
cur = cur.next;
}
return false;
};
//删除第一次出现关键字为key的节点
public void remove(int key){
if (head == null) {
return;
}
if (head.val == key) {
head = head.next;
return;
}
ListNode cur = head;
while (cur.next != null) {
if (cur.next.val ==key) {
cur.next = cur.next.next;
}else {
cur = cur.next;
}
}
};
//删除所有值为key的节点
public void removeAllKey(int key){
if(head == null) {
return ;
}
ListNode prev = head;
ListNode cur = head.next;
while(cur != null) {
if(cur.val == key) {
prev.next = cur.next;
cur = cur.next;
}else {
prev = cur;
cur = cur.next;
}
}
if(head.val == key) {
head = head.next;
}
};
//得到单链表的长度
public int size(){
int count = 0;
ListNode cur = head;
while(cur != null) {
cur = cur.next;
count++;
}
return count;
};
//遍历链表
public void display(){
ListNode cur = head;
while (cur != null) {
System.out.println(cur.val + " ");
cur = cur.next;
}
System.out.println();
};
//删除链表
public void clear(){
head = null;
};
}