dianbolan 2021-08-02 16:47 采纳率: 100%

# 单链表如何用java语言实现

• 写回答

#### 2条回答默认 最新

• qq_36941205 2021-08-02 16:49
关注

/**

• 单链表实现

• @author caasi

• @since 2021-07-28 16:58:20

• /
public class SinglyLinkedList implements Cloneable{
/**

• 需要有的最基本的方法
• size() 返回链表的长度
• isEmpty() 判断链表是否为空
• 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 tail;
//链表长度
private int size;

public int size(){

``````  return size;
``````

}

public boolean isEmpty(){

``````  return size == 0;
``````

}

public E first(){

``````  if(isEmpty()) return null;
``````

}

public E last(){

``````  if(isEmpty()) return null;
return tail.getElement();
``````

}

public E removeFirst(){

``````  if(isEmpty()) return null;
E e = head.getElement();
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()){
} 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;
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){
Node<E> walk = head.getNext();
Node<E> otherTail = other.head;
while (walk != null){
Node<E> newest = new Node<>(walk.getElement(), null);
walk = walk.getNext();
}
}
return other;
``````

}
}

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 问题事件

• 已结题 （查看结题原因） 8月2日
• 已采纳回答 8月2日
• 创建了问题 8月2日

#### 悬赏问题

• ¥150 寻找王者荣耀开发作者，合作或者解答
• ¥15 乳腺癌数据集 相关矩阵 特征选择
• ¥15 我的游戏账号被盗取，请问我该怎么做
• ¥15 通关usb3.0.push文件，导致usb频繁断连
• ¥15 有没有能解决微信公众号，只能实时拍照，没有选择相册上传功能，我不懂任何技术，，有没有给我发个软件就能搞定的方法
• ¥15 Pythontxt文本可视化
• ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
• ¥15 springboot国际化
• ¥15 搭建QEMU环境运行OP-TEE出现错误
• ¥15 Minifilter文件保护