链表之双端链表


        从单链表的特性可以看出,向链表中添加元素除了添加到第一个位置以外都必须遍历链表,如果要在链表的末尾添加一个元素则需要从第一个一次遍历到链表的最后一个元素才可以完成添加。当数据量比较大的时候向末尾添加元素的操作过于繁琐。于是双端链表出现了,他可以解决想单链表末尾添加元素操作繁琐的问题。

        双端链表相比于单链表只是添加了一个指针指向链表的最后一个元素(区别于双向链表)。其他的操作和单链表一致。


java代码的实现:


public class FirstLastList {
Node firstNode;
Node lastNode;

public Node getFirstNode() {
return firstNode;
}
public void setFirstNode(Node firstNode) {
this.firstNode = firstNode;
}
public Node getLastNode() {
return lastNode;
}
public void setLastNode(Node lastNode) {
this.lastNode = lastNode;
}
public FirstLastList(){
firstNode = null;
lastNode = null;
}
public boolean isEmpty(){
return lastNode==null;
}
public void addFirst(String value){
Node node = new Node(value);
if(isEmpty()){
node.setNext(null);
lastNode = node;
firstNode = node;
}else {
node.setNext(firstNode);
firstNode = node;
}
}
public void delFirst(){
if(isEmpty()){
return;
}else {
if(firstNode.getNext()==null){
firstNode = lastNode = null;
}else {
firstNode = firstNode.getNext();
}
}
}
public void addLast(String value){
Node node = new Node(value);
if(isEmpty()){
node.setNext(null);
firstNode = lastNode = node;
}else {
lastNode.setNext(node);
lastNode = node;
}
}
public void show(){
if(isEmpty()){
return;
}else {
Node node = firstNode;
while(node!=null){
System.out.print(node.showValue()+" ");
node = node.getNext();
}
System.out.println();
}
}
}


测试代码:


FirstLastList fLastList = new FirstLastList();
for(int i =100;i<1000;i+=100){
fLastList.addFirst(i+"");
}
fLastList.show();
fLastList.addFirst(123+"");
fLastList.addFirst(456+"");
fLastList.show();
fLastList.addLast(654+"");
fLastList.addLast(321+"");
fLastList.show();
fLastList.delFirst();
fLastList.show();
fLastList.delFirst();
fLastList.show();


测试结果:

900 800 700 600 500 400 300 200 100
456 123 900 800 700 600 500 400 300 200 100
456 123 900 800 700 600 500 400 300 200 100 654 321
123 900 800 700 600 500 400 300 200 100 654 321
900 800 700 600 500 400 300 200 100 654 321


结论:

双端链表仅仅解决想单链表末尾添加元素的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值