您的位置:首页 > 其它

双向链表

2012-03-29 11:31 69 查看
Java数据结构和算法中文第二版.pdf 代码
Link.java

package com.ch5.doublyLinked;

public class Link {

private long dData ;
private Link next ;
private Link previous ;

public Link getPrevious() {
return previous;
}
public void setPrevious(Link previous) {
this.previous = previous;
}

public Link(){

}
public Link(long dData){
this.dData = dData ;
}

public long getdData() {
return dData;
}
public void setdData(long dData) {
this.dData = dData;
}

public Link getNext() {
return next;
}
public void setNext(Link next) {
this.next = next;
}
public void displayLink(){
System.out.print(dData+ " ");
}
}

DoublyLinkedList .java

package com.ch5.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 key){
Link newLink = new Link(key) ;
if (isEmpty()){
last = newLink ;
}else{
first.setPrevious(newLink) ;
}
newLink.setNext(first) ;
first = newLink ;
}

public void insertLast(long key){
Link newLink = new Link(key) ;
if (isEmpty()){
first = newLink ;
}else{
last.setNext(newLink) ;
newLink.setPrevious(last) ;
}
last = newLink ;
}

public Link deleteFirst(){
Link temp = null ;

if (! isEmpty()) {
temp = first ;
if (first.getNext() == null){
last  = null ;
}else{
first.getNext().setPrevious(null) ;
}
first = first.getNext();
}

return temp ;
}

public Link deleteLast(){

Link temp = null ;
if (!isEmpty()){
temp = last ;
if (first.getNext() == null){
first = null ;
}else{
last.getPrevious().setNext(null) ;
}
last = last.getPrevious() ;
}
return temp ;
}

public boolean insertAfter(long key , long value){

if (isEmpty()){
return false ;
}
Link current = first ;
while(current.getdData() != key){

current = current.getNext() ;
if(null == current){
return false ;
}
}
Link newLink = new Link(value) ;

if (current == last){
newLink.setNext(null) ;
last = newLink ;
}else{
newLink.setNext(current.getNext()) ;
current.getNext().setPrevious(newLink) ;
}

current.setNext(newLink) ;
newLink.setPrevious(current) ;
return true ;
}

public Link deleteKey(long key){
if (isEmpty()){
return null ;
}
Link current = first ;
while(current.getdData() != key){
current = current.getNext() ;
if (current == null){
return null ;
}
}

if (current == first){
first.getNext().setPrevious(null) ;
}else{
current.getPrevious().setNext(current.getNext()) ;
}
if (current == last){
last = current.getPrevious() ;
last.setNext(null) ;
}else{
current.getNext().setPrevious(current.getPrevious()) ;
}

return current  ;
}

public void displayForward(){
System.out.println("List (first --> last):") ;
Link current = first ;
while(null != current){
current.displayLink() ;
current = current.getNext() ;
}
System.out.println(" ");
}

public void displayBackward(){
System.out.println("List (last --> first):") ;
Link current = last ;
while (null != current){
current.displayLink() ;
current = current.getPrevious() ;
}

System.out.println(" ");
}

}

DoublyLinkedApp.java

package com.ch5.doublyLinked;

public class DoublyLinkedApp {

/**
* @param args
*/
public static void main(String[] args) {

DoublyLinkedList theList = new DoublyLinkedList() ;
theList.insertFirst(22) ;
theList.insertFirst(44) ;
theList.insertFirst(66) ;
theList.insertFirst(88) ;
theList.displayForward() ;
theList.displayBackward() ;

theList.insertLast(99);
theList.insertLast(100);
theList.insertLast(111);

theList.displayForward() ;
theList.displayBackward() ;

theList.insertAfter(22, 33) ;
theList.insertAfter(44, 55) ;
theList.displayForward() ;
theList.displayBackward() ;

theList.deleteFirst() ;
theList.deleteLast() ;
theList.deleteKey(22) ;
theList.displayForward() ;
theList.displayBackward() ;
}

}

运行结果:

List (first --> last):

88 66 44 22

List (last --> first):

22 44 66 88

List (first --> last):

88 66 44 22 99 100 111

List (last --> first):

111 100 99 22 44 66 88

List (first --> last):

88 66 44 55 22 33 99 100 111

List (last --> first):

111 100 99 33 22 55 44 66 88

List (first --> last):

66 44 55 33 99 100

List (last --> first):

100 99 33 55 44 66
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: