知识大全 Java实现双向链表

Posted 结点

篇首语:贫不足羞,可羞是贫而无志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java实现双向链表相关的知识,希望对你有一定的参考价值。

Java实现双向链表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  自定异常类

  Java代码

  public class MyException extends Exception

  public MyException();

  public MyException(String msg)

  super(msg);

  

  

  链表结点对像

  Java代码

  public class Node

  public Node previou=null;//前结点指针

  public Node next=null;   //后结点指针

  public Object value;//结点值

  Node(Object value)

  this value=value;

  

  

  链表对像

  Java代码

  public class DoubleLinked

  private Node head;//链表头

  DoubleLinked()

  

  /**

  * 判断是否还有下一个结点 没有则为链表的尾结点

  * @param node

  * @return

  */

  public boolean hasNext(Node node)

  if(node next==null)

  return false;

  return true;

  

  /**

  * 判断是否有上一个结点 没有则为链表的头结点

  * @param node

  * @return

  */

  public boolean hasPrev(Node node)

  if(node previou==null)

  return false;

  return true;

  

  /**

  * 获取链表头元素

  * @return

  * @throws MyException

  */

  public Node getHead() throws MyException

  if(head==null)

  throw new MyException( 链表为空 );

  

  return head;

  

  /**

  * 获取上一个接点

  * @param node

  * @return

  */

  public Node getPrev(Node node)

  return node previou;

  

  /**

  * 获取下一个结点

  * @param node

  * @return

  */

  public Node getNext(Node node)

  return node next;

  

  /**

  * 根据索引获取结点

  * @param index 结点索引

  * @return

  * @throws MyException

  */

  public Node getNode(int index) throws MyException

  Node curNode=null;

  Node next=null;

  Node node=null;

  if(head==null)

  throw new MyException( 链表为空 );

  else

  curNode=head;

  for(int i= ;i<index;i++)

  if(curNode==null)

  throw new MyException( 你要获取的元素索引大于链表长度 );

  else

  node=curNode;

  if(hasNext(curNode))

  next=curNode next;

  curNode=next;

  else

  curNode=null;

  

  

  

  

  return node;

  

  /**

  * 获取最后一个结点

  * @return

  * @throws MyException

  */

  public Node getLast() throws MyException

  Node curNode=null;

  Node next=null;

  Node last=null;

  boolean flag=true;

  if(head==null)

  throw new MyException( 链表为空 );

  else

  curNode=head;

  while(flag)

  if(hasNext(curNode))

  next=curNode next;

  curNode=next;

  else

  last=curNode;

  flag=false;

  

  

  

  return last;

  

  /**

  * 在链表头添加新结点

  * @param node

  */

  public void addHead(Node node)

  if(head==null)

  head=node;

  else

  node next=head;

  head previou=node;

  head=node;

  

  

  /**

  * 在链表末尾处添加新结点

  * @param node

  * @throws MyException

  */

  public void addLast(Node node) throws MyException

  if(head==null)

  head=node;

  else

  Node last=this getLast();

  last next=node;

  node previou=last;

  

  

  /**

  * 在链表中间插入新结点

  * @param node

  * @throws MyException

  */

  public void insertNode(int index Node node) throws MyException

  Node indexNode=this getNode(index);

  Node prev=indexNode previou;

  prev next=node;

  node previou=prev;

  node next=indexNode;

  indexNode previou=node;

  

  /**

  * 删除链表头结点

  * @return

  * @throws MyException

  */

  public Node deleteHead() throws MyException

  Node head=this getHead();

  if(hasNext(head))

  Node next=head next;

  this head=next;

  next previou=null;

  

  return head;

  

  /**

  * 删除链表的最后一个结点

  * @return

  * @throws MyException

  */

  public Node deleteLast() throws MyException

  Node last=this getLast();

  Node prev=last previou;

  if(prev==null)

  this head=null;

  else

  prev next=null;

  

  return last;

  

  /**

  * 根据索引删除链表结点

  * @param index

  * @return

  * @throws MyException

  */

  public Node deleteNode(int index) throws MyException

  Node node=this getNode(index);

  Node prev=node previou;

  Node next=node next;

  if(prev==null && next!=null)

  this head=next;

  next previou=null;

  

  if(prev!=null && next==null)

  prev next=null;

  

  if(prev==null && next==null)

  this head=null;

  

  if(prev!=null && next!=null)

  prev next=next;

  next previou=prev;

  

  return node;

  

cha138/Article/program/Java/hx/201311/26531

相关参考

知识大全 循环链表与双向链表

第九课本课主题循环链表与双向链表教学目的掌握循环链表的概念掌握双向链表的的表示与实现教学重点双向链表的表示与实现教学难点双向链表的存储表示授课内容一复习线性链表的存储结构二循环链表的存储结构循环链表是

知识大全 数据结构学习讲座(C++)双向链表

数据结构学习讲座(C++)双向链表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!双向链表 

知识大全 数据结构 3.5 双向链表中插入元素示例算法

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  voidListInsert_DuL(DuLink&LDuLNode

知识大全 数据结构 3.6 双向链表中删除元素示例算法

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  voidListDelete_DuL(DuLink&LDuNode*

知识大全 数据结构之单链表基本运算的实现[14]

  图双向链表中的结点删除  双向链表的结束条件和单链表相同双向循环链表的结束条件和单向循环链表的结束条件相同  静态链表  根据上节单链表的知识用单链表表示线性表时其结点空间是在运行时根据需要动态分

知识大全 java链表

  实体类      Java代码      publicclassNode&n

知识大全 数据结构 3.4 双向循环链表

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  与单链表类似双向链表也是由指向头结点的头指针唯一确定若将头尾结点链接起来则构

知识大全 pHeadA,pHeadB,请写一函数将两链表中data

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜

知识大全 双链表

双链表双向链表(DoubleLinkedList)    双(向)链表中有两条方向不同的链即每个结点中除next域存放后继结点地址外还增加一个指向其直接前趋的指针域pri

知识大全 数据结构考研分类复习真题 第二章 答案[52]

  .[题目分析]双向循环链表自第二结点至表尾递增有序要求将第一结点插入到链表中使整个链表递增有序由于已给条件(a<x<an)故应先将第一结点从链表上摘下来再将其插入到链表中相应位置由于是