链表-H-双向链表,允许前后遍历

package e_link.H_doublyLinked;


/**
 * 双向链表,允许前后遍历
 * 
 * @author Administrator
 */
public class DoublyLinkedApp {
public static void main(String[] args) {
DoublyLinkedList theList = new DoublyLinkedList();
theList.insertFirst(10);
theList.insertFirst(20);
theList.insertFirst(30);
theList.insertLast(80);
theList.insertLast(90);
theList.insertLast(100);
theList.insertAfter(30, 40);
theList.insertAfter(30, 60);
theList.displayForward();
System.out.println();
theList.displayBackward();
System.out.println();


theList.deleteFirst();
theList.deleteLast();
theList.deleteKey(60);
theList.displayForward();
System.out.println();
theList.displayBackward();
}
}package e_link.H_doublyLinked;


public class DoublyLinkedList {
private Link first;
private Link last;


public DoublyLinkedList() {
first = null;
last = null;
}


public boolean isEmpty() {
return first == null;
}


public void insertFirst(long dd) {
Link newLink = new Link(dd);
if (isEmpty()) {
last = newLink;
} else {
first.previous = newLink;
}
newLink.next = first;
first = newLink;
}


public void insertLast(long dd) {
Link newLink = new Link(dd);
if (isEmpty()) {
first = newLink;
} else {
last.next = newLink;
newLink.previous = last;
}
last = newLink;
}


public Link deleteFirst() {
Link temp = first;
if (first.next == null) {
last = null;
} else {
first.next.previous = null;
}
first = first.next;
return temp;
}


public Link deleteLast() {
Link temp = last;
if (first.next == null) {
first = null;
} else {
last.previous.next = null;
}
last = last.previous;
return temp;
}


/*
* 在key后面添加数据
*/
public boolean insertAfter(long key, long dd) {
Link current = first;
while (current.data != key) {
current = current.next;
if (current == null)
return false;
}
Link newLink = new Link(dd);
if (current == last) {
newLink.next = null;
last = newLink;
} else {
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
}


/*
* 删除值为key的对象
*/
public Link deleteKey(long key) {
Link current = first;
while (current.data != key) {
current = current.next;
if (current == null)
return null;
}
//干掉前面
if (current == first) {
first = current.next;
} else {
current.previous.next = current.next;
}
//连接后面
if (current == last) {
last = current.previous;
} else {
current.next.previous = current.previous;
}
return current;
}


public void displayForward() {
Link link = first;
while (link != null) {
link.displayLink();
link = link.next;
}
}


public void displayBackward() {
Link link = last;
while (link != null) {
link.displayLink();
link = link.previous;
}
}
}package e_link.H_doublyLinked;


public class Link {
public long data;
public Link next;
public Link previous;


public Link(long dd) {
data = dd;
}


public void displayLink() {
System.out.print(data + " ");
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值