如题,要完整的代码,包含最基本的链表是否为空,链表长度,在头或尾部添加元素,在头部移除元素(尾部不要求)
2条回答 默认 最新
- qq_36941205 2021-08-02 16:49关注
/**
单链表实现
@author caasi
@since 2021-07-28 16:58:20
/
public class SinglyLinkedList implements Cloneable{
/**- 需要有的最基本的方法
- size() 返回链表的长度
- isEmpty() 判断链表是否为空
- addFirst() 在链表头部添加元素
- addLast() 在链表尾部添加元素
- first() 返回链表的第一个元素,如果链表为空,则返回null
- last() 返回链表的最后一个元素,如果链表为空,则返回null
- removeFirst() 删除并返回链表的第一个元素,如果链表为空,则返回null
- /
/**
节点内部类
@param
/
private class Node{
private E element;
private Node next;
public Node(E e, Node n){element = e; next = n;
}
public E getElement(){
return element;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
//头节点
private Node head;
//尾节点
private Node tail;
//链表长度
private int size;public int size(){
return size;
}
public boolean isEmpty(){
return size == 0;
}
public E first(){
if(isEmpty()) return null; return head.getElement();
}
public E last(){
if(isEmpty()) return null; return tail.getElement();
}
public E removeFirst(){
if(isEmpty()) return null; E e = head.getElement(); head = head.getNext(); size -- ; if(isEmpty()) tail = null; return e;
}
public void addFirst(E e){
head = new Node<>(e, head); if(isEmpty()) tail = head; size ++;
}
public void addLast(E e){
Node<E> newNode = new Node<>(e, null); if(isEmpty()){ head = newNode; } else { tail.setNext(newNode); } size ++; tail = newNode;
}
public void add(E e){
addLast(e);
}
public void print(){
if(isEmpty()) return; Node<E> node = head; while(node != null){ System.out.println(node.getElement()); node = node.getNext(); }
}
@Override
public boolean equals(Object obj) {if (obj == null) return false; if(getClass() != obj.getClass()) return false; SinglyLinkedList o = (SinglyLinkedList) obj; if(size != o.size) return false; Node walkA = head; Node walkB = o.head; while (walkA != null){ if(!walkA.getElement().equals(walkB.getElement())){ return false; } walkA = walkA.getNext(); walkB = walkB.getNext(); } return true;
}
@Override
protected Object clone() throws CloneNotSupportedException {SinglyLinkedList other = (SinglyLinkedList) super.clone(); if (size > 0){ other.head = new Node<E>(head.getElement(), null); Node<E> walk = head.getNext(); Node<E> otherTail = other.head; while (walk != null){ Node<E> newest = new Node<>(walk.getElement(), null); otherTail.setNext(newest); otherTail = newest; walk = walk.getNext(); } } return other;
}
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 有偿求苍穹外卖环境配置
- ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
- ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
- ¥15 clousx6整点报时指令怎么写
- ¥30 远程帮我安装软件及库文件
- ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
- ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
- ¥15 Arduino的wifi连接,如何关闭低功耗模式?
- ¥15 Android studio 无法定位adb是什么问题?
- ¥15 C#连接不上服务器,