双向链表

原创 2012年03月29日 11:31:08
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 

双向链表源码.(C、C++、JAVA)

  • 2017年01月21日 21:57
  • 8KB
  • 下载

双向链表实现

  • 2014年12月05日 09:59
  • 2KB
  • 下载

Linux 内核里的数据结构——双向链表(dlist)

Linux 内核里的数据结构——双向链表双向链表Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会从双向链表数据结构开始内核的数据结构。为什么?因...

异或指针双向链表

  • 2016年12月16日 19:09
  • 14KB
  • 下载

双向链表的操作

  • 2014年02月28日 19:25
  • 5KB
  • 下载

数据结构学习之双向链表结构

注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流。转载请注明来自: http://blog.csdn.net/ab198604           在前面总结的单向链表结构的基础上...
  • ab198604
  • ab198604
  • 2012年12月10日 22:48
  • 13093

数据结构---双向链表的实现

  • 2012年08月17日 23:24
  • 2KB
  • 下载

双向链表代码

  • 2013年08月23日 14:52
  • 2KB
  • 下载

【IT笔试面试题整理】二叉搜索树转换为双向链表

【试题描述】 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点。   思路一: 采用递归思...
  • zwqjoy1
  • zwqjoy1
  • 2017年12月01日 17:44
  • 12
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:双向链表
举报原因:
原因补充:

(最多只允许输入30个字)