首页 > 代码库 > 实现一个基于双向链表的双端队列
实现一个基于双向链表的双端队列
package day1_30_5_2;public class DoubleLinkedList { private Link first; private Link last; public DoubleLinkedList(){ first = null; last = null; } //判断是不是为空 public boolean isEmpty(){ return first == null; } //在双向链表的前端插入 public void insertFirst(long dd){ Link newLink = new Link(dd); if(isEmpty()){//如果双向链表为空,就让last指针直接指向新创建的节点 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) // if only one item first = null; // first --> null else last.previous.next = null; // old previous --> null last = last.previous; // old previous <-- last return temp; } //在某个元素的后面添加一个元素,insert dd after key public boolean insertAfter(long key,long dd){ Link current = first; while(current.dData != key){ current = current.next; if(current == null){ return false; } } //创建一个新的节点 Link newLink = new Link(dd); //current 在last 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; } public Link deleteKey(long key){ Link current = first; // start at beginning while (current.dData != key) // until match is found, { current = current.next; // move to next link if (current == null) return null; // didn‘t find it } if (current == first) // found it; first item? first = current.next; // first --> old next else // not first // old previous --> old next current.previous.next = current.next; if (current == last) // last item? last = current.previous; // old previous <-- last else // not last // old previous <-- old next current.next.previous = current.previous; return current; // return value } public void displayForward() { System.out.print("List (first-->last): "); Link current = first; // start at beginning while (current != null) // until end of list, { current.displayLink(); // display data current = current.next; // move to next link } System.out.println(""); } // ------------------------------------------------------------- public void displayBackward() { System.out.print("List (last-->first): "); Link current = last; // start at end while (current != null) // until start of list, { current.displayLink(); // display data current = current.previous; // move to previous link } System.out.println(""); } }
实现一个基于双向链表的双端队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。