双端链表实现
1 定义
双端链表与传统的链表很相似,但是它有一个新增的特性;即对最后一个链结点的引用
2 基本操作
表头插入 insertFirst
表尾插入 insertLast
表头删除 deleteFirst
3 基本元素
链表头 First
链表尾 Last
节点 Node
节点中数据域 data
节点中指针域 next
4 思路
First与Last
链表为空时first与last均为Null
链表中只有一个结点时,first与last均指向第一个结点
正常情况下,first指向第一个结点,last指向最后一个结点
表头插入 insertFirst
注意区分链表为空和不为空的情况
链表为空时,last = newNode
newNode.next = first
first = newNode
表尾插入 insertLast
注意区分链表为空和不为空的情况
链表为空时,first = newNode
last.next = newNode
last = newNode
表头删除 deleteFirst
代码实现
public class FirstLastLinkedList {
private Node first;
private Node last;
public FirstLastLinkedList() {
first = null;
last = null;
}
public void insertFirst(int data){
Node newNode = new Node(data);
newNode.next = first;
first = newNode;
if (isEmpty()){
last= newNode;
}
}
public void insertLast(int data){
Node newNode = new Node(data);
if (isEmpty()){
first = newNode;
}else {
last.next = newNode;
}
last = newNode;
}
public int deleteFirst(){
int temp = first.data;
if (first.next == null){
last = null;
}
first = first.next;
return temp;
}
private boolean isEmpty(){
return first == null;
}
class Node{
private int data;
private Node next;
public Node(int data) {
this.data = data;
}
@Override
public String toString() {
return "Node{" +
"data=" + data +
'}';
}
}
}
网友评论