Java中深入浅析的链表

  介绍

本篇文章为大家展示了深入浅析Java中的链表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

insertFirst:在表头插入一个新的链接点,时间复杂度为O (1)

deleteFirst:删除表头的链接点,时间复杂度为O (1)

发现:查找包含指定关键字的链接点,由于需要遍历查找,平均需要查找N/2次,即O (N)

删除:删除包含指定关键字的链接点,由于需要遍历查找,平均需要查找N/2次,即O (N),

公共类LinkedList {
  私人类数据{
  私有对象obj;
  私人数据下=零;
  数据(对象obj) {
  这一点。obj=obj;
  }
  }
  私人数据第一次=零;
  
  公共空间insertFirst(对象obj) {
  Data=https://www.yisu.com/zixun/new数据(obj);
  数据。下一个=第一;
  第一次=数据;
  }
  公共对象deleteFirst()抛出异常{
  如果(第一次==null)
  抛出新的异常(“空!”);
  数据temp=第一;
  第一次=first.next;
  返回temp.obj;
  }
  找到公共对象(对象obj){抛出异常
  如果(第一次==null)
  抛出新的异常(“LinkedList是空的!”);
  数据cur=第一;
  而(坏蛋!=null) {
  如果(cur.obj.equals (obj)) {
  返回cur.obj;
  }
  坏蛋=cur.next;
  }
  返回null;
  }
  公共空间删除(对象obj){抛出异常
  如果(第一次==null)
  抛出新的异常(“LinkedList是空的!”);
  如果(first.obj.equals (obj)) {
  第一次=first.next;
  其他}{
  数据前=第一;
  数据cur=first.next;
  而(坏蛋!=null) {
  如果(cur.obj.equals (obj)) {
  精准医疗下一个=cur.next;
  }
  pre=坏蛋;
  坏蛋=cur.next;
  }
  }
  }
  公共布尔isEmpty () {
  返回(第一次==null);
  }
  公共空间显示(){
  如果(第一次==null)
  System.out.println(“空”);
  数据cur=第一;
  而(坏蛋!=null) {
  System.out.print (cur.obj.toString () +“->”);
  坏蛋=cur.next;
  }
  System.out.print (“/n”);
  }
  公共静态void main (String [] args){抛出异常
  LinkedList噢=new LinkedList ();
  ll.insertFirst (4);
  ll.insertFirst (3);
  ll.insertFirst (2);
  ll.insertFirst (1);
  ll.display ();
  ll.deleteFirst ();
  ll.display ();
  ll.remove (3);
  ll.display ();
  System.out.println (ll.find (1));
  System.out.println (ll.find (4));
  }
  }
 1→2→3→4→
  2→3→4→
  2→4→
  零
  4 

与单向链表的不同之处在保存有对最后一个链接点的引用(去年)

insertFirst:在表头插入一个新的链接点,时间复杂度O (1)

insertLast:在表尾插入一个新的链接点,时间复杂度O (1)

deleteFirst:删除表头的链接点,时间复杂度O (1)

deleteLast::删除表尾的链接点,由于只保存了表尾的链接点,而没有保存表尾的前一个链接点(这里就体现出双向链表的优势了),所以在删除表尾链接点时需要遍历以找到表尾链接点的前一个链接点,需查找N - 1次,也就是O (N)
有了这几个方法就可以用双端链表来实现一个队列了

公共类FirstLastList {
  私人类数据{
  私有对象obj;
  私人数据下=零;
  数据(对象obj) {
  这一点。obj=obj;
  }
  }
  私人数据第一次=零;
  私人数据最后=零;
  公共空间insertFirst(对象obj) {
  Data=https://www.yisu.com/zixun/new数据(obj);
  如果(第一次==null)
  去年=数据;
  数据。下一个=第一;
  第一次=数据;
  }
  公共空间insertLast(对象obj) {
  数据数据=新数据(obj);
  如果(第一次==null) {
  第一次=数据;
  其他}{
  最后一次。下一个=数据;
  }
  去年=数据;
  }
  公共对象deleteFirst()抛出异常{
  如果(第一次==null)
  抛出新的异常(“空”);
  数据temp=第一;
  如果(第一。下一个==null)
  去年=零;
  第一次=first.next;
  返回temp.obj;
  }
  公共空间deleteLast()抛出异常{
  如果(第一次==null)
  抛出新的异常(“空”);
  如果(第一。下一个==null) {
  第一次=零;
  去年=零;
  其他}{
  数据temp=第一;
  而(temp。下一个!=null) {
  如果(temp。下一个==最后){
  去年=temp;
  最后一次。下一个=零;
  打破;
  }
  temp=temp.next;
  }
  }
  }
  公共空间显示(){
  如果(第一次==null)
  System.out.println(“空”);
  数据cur=第一;
  而(坏蛋!=null) {
  System.out.print (cur.obj.toString () +“->”);
  坏蛋=cur.next;
  }
  System.out.print (“/n”);
  }
  公共静态void main (String [] args){抛出异常
  FirstLastList算法=new FirstLastList ();
  fll.insertFirst (2);
  fll.insertFirst (1);
  fll.display ();
  fll.insertLast (3);
  fll.display ();
  fll.deleteFirst ();
  fll.display ();
  fll.deleteLast ();
  fll.display ();
  }
  }

Java中深入浅析的链表