直接上代码
创建接口说面链表中有哪些功能
public interface MySingLeLinkedList {
public void addFirst(int data);
//尾插法
public void addLast(int data);
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data);
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key);
//删除第一次出现关键字为key的节点
public void remove(int key);
public void removeAllKey(int key);
//得到单链表的长度
public int size();
public void clear();
public void display() ;
}
实现接口
public class MyList implements MySingLeLinkedList{
static class ListNode{
public int val;
public ListNode next;
public ListNode prev;
public ListNode(int val){
this.val=val;
}
}
public ListNode head;
public ListNode last;
public void addFirst(int data){
ListNode listNode = new ListNode(data);
if(head==null){
head = listNode;
last = listNode;
}else {
listNode.next=head;
head.prev=listNode;
head = listNode;
}
}
//尾插法
public void addLast(int data){
ListNode listNode = new ListNode(data);
if(head==null){
head=listNode;
last=listNode;
}else {
last.next=listNode;
listNode.prev=last;
last=listNode;
}
}
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data) {
if(index<0||index>size()){
System.out.println("下标输入错误");
}
if(index==0){
addFirst(data);
return;
}
if(index==size()){
addLast(data);
return;
}
ListNode cur = Findindex(index);
ListNode listNode = new ListNode(data);
listNode.next=cur.next;
cur.next=listNode;
}
private ListNode Findindex(int index){
ListNode cur = head;
while (index!=1){
cur=cur.next;
index--;
}
return cur;
}
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key) {
ListNode listNode = new ListNode(key);
ListNode cur = head;
while (cur!=null){
if(cur.val==key){
return true;
}
else
{
cur=cur.next;
}
}
return false;
}
//删除第一次出现关键字为key的节点
public void remove(int key) {
ListNode listNode = new ListNode(key);
ListNode cur = head;
if(cur==null){
System.out.println("没有任何可以删除的了");
return;
}
if(cur.val==key){
head=head.next;
}
if(contains(key)){
while (cur.next!=null){
if(cur.next.val==key){
cur.next=cur.next.next;
return;
}else {
cur=cur.next;
}
}
}
;
}
public void removeAllKey(int key) {
ListNode listNode = new ListNode(key);
ListNode cur = head;
if(cur==null){
System.out.println("没有任何可以删除的了");
return;
}
while (cur.next!=null){
if(cur.val==key){
head=head.next;
}
else if(cur.next.val==key){
cur.next=cur.next.next;
}else {
cur=cur.next;
}
}
}
//得到单链表的长度
public int size() {
int count = 0;
ListNode cur = head;
while (cur!=null){
count++;
cur=cur.next;
}
return count;
}
public void clear() {
head=null;
}
public void display() {
ListNode cur = head;
while (cur!=null){
System.out.print(cur.val+" ");
cur=cur.next;
}
System.out.println();
}
}
进行测试
public class Main {
public static void main(String[] args) {
MyList myList = new MyList();
// myList.addLast(1);
// myList.addLast(2);
// myList.addLast(3);
// myList.addLast(4);
// myList.addLast(5);
// myList.addLast(6);
// myList.addLast(7);
// myList.addLast(7);
// myList.addLast(8);
// myList.addLast(9);
myList.addLast(7);
myList.addLast(7);
myList.addLast(7);
// myList.addLast(10);
myList.removeAllKey(7);
myList.display();
System.out.println(myList.contains(5));
}
}