• 链表(二)


    双端链表:与单链表非常相似,但添加了一个特性:对最后一个链接点的引用,就像跟单链表的第一个链接点引用一样。(insertFirst)
    单链表对最后的一个链接点也可以引用,方法是遍历到表尾,找到最后一个链接点,但是效率太低了,所以提出双端链表。

     1 public class Link {
     2 
     3     private int iData;
     4     private double dData;
     5     private Link next;
     6 
     7     public Link(int i, double d) {
     8         this.iData = i;
     9         this.dData = d;
    10     }
    11 
    12     public void displayLink() {
    13         System.out.println("{ " + iData + " , " + dData + " }");
    14     }
    15 
    16     public Link getNext() {
    17         return next;
    18     }
    19 
    20     public void setNext(Link next) {
    21         this.next = next;
    22     }
    23 
    24     public int getiData() {
    25         return iData;
    26     }
    27 
    28     public double getdData() {
    29         return dData;
    30     }
    31 
    32 }
     1 public class FirstLastLinkList {
     2 
     3     private Link first;
     4 
     5     private Link last;
     6 
     7     public boolean isEmpty() {
     8         return first == null;
     9     }
    10 
    11     public void insertFirst(int i, double d) {
    12         Link newLink = new Link(i, d);
    13         if (isEmpty()) {
    14             last = newLink;
    15         }
    16         newLink.setNext(first);
    17         first = newLink;
    18     }
    19 
    20     //双端链表特性
    21     public void insertLast(int i, double d) {
    22         Link newLink = new Link(i, d);
    23         if (isEmpty()) {
    24             first = newLink;
    25         }
    26         else {
    27             last.setNext(newLink);
    28         }
    29         last = newLink;
    30     }
    31 
    32     public Link deleteFirst() {
    33         if (!isEmpty()) {
    34             Link l = first;
    35             first = first.getNext();
    36             if (isEmpty()) {
    37                 last = null;
    38             }
    39             return l;
    40         }
    41         return null;
    42     }
    43 
    44     public void displayList() {
    45         Link current = first;
    46         while (current != null) {
    47             current.displayLink();
    48             current = current.getNext();
    49         }
    50     }
    51 
    52 }
     1     public static void main(String[] args) {
     2         FirstLastLinkList fll = new FirstLastLinkList();
     3 
     4         fll.insertLast(9, 9.2);
     5         fll.insertFirst(1, 1.2);
     6         fll.insertFirst(2, 2.2);
     7         fll.insertLast(10, 10.2);
     8         System.out.println("------------DISPLAY");
     9         fll.displayList();
    10         System.out.println("------------DELETE");
    11         fll.deleteFirst().displayLink();
    12         System.out.println("------------DISPLAY");
    13         fll.displayList();
    14         
    15     }

    打印结果:
    ------------DISPLAY
    { 2 , 2.2 }
    { 1 , 1.2 }
    { 9 , 9.2 }
    { 10 , 10.2 }
    ------------DELETE
    { 2 , 2.2 }
    ------------DISPLAY
    { 1 , 1.2 }
    { 9 , 9.2 }
    { 10 , 10.2 }

  • 相关阅读:
    逻辑代码题:五个学生参加计算机比赛
    逻辑代码题:如果昨天是明天,那今天就是周五了
    面试题:二叉树的遍历
    面试题:判断链表是否存在环
    面试题:将字符串中的中英文分开显示
    N皇后
    2017<java技术>预备作业2计科陈刚
    transition+transform合并效果案例
    transition CSS3动画属性之过渡
    Less 编译的几种方式
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2772894.html
Copyright © 2020-2023  润新知