《数据结构与算法》学习笔记13 单链表和双端链表

本文详细介绍了单链表和双端链表的实现方法,包括插入、删除及遍历等核心操作,并通过具体示例展示了如何使用这些链表进行数据管理。
//单链表
public class Link {
  private double value;
  public int idata;
  public Link next;
  
  public Link(int id,double dd){
	  value=dd;
	  idata=id;
  }
  
  public void displayLink(){
	  System.out.println("("+idata+","+value+")");
  }
}
public class LinkList {
  private Link first;
  
  public LinkList(){
	  first=null;
  }
  
  public void insertFirst(int id,double dd){
	  Link newl=new Link(id,dd);
	  newl.next=first;
	  first=newl;
  }
  
  public boolean isEmpty(){
	  return first==null;
  }
  
  public Link check(int id){
	  Link current=first;
	  while(current.idata!=id){
		  if(current.next==null) return null;
		  else current=current.next;
	  }
	  return current;
  }
  
  public void delete(int id){
	  Link current=first;
	  Link temp=null;
	  if(current.idata==id){
		  first=first.next;
	  }
	  else{
	  while(current.idata!=id){
		  if(current.next!=null){
			temp=current;
            current=current.next;}
		  else {
			  System.out.println("not find");
			  break;
		  }
	  }
	  temp.next=current.next;
    }
  }
  
  public void deleteFirst(){
	  first=first.next;
  }
  
  public void displayAll(){
	  System.out.println("first->last:");
	  Link current=first;
	  while(current!=null){
		  current.displayLink();
		  current=current.next;
	  }
	  System.out.println();
  }
}

public class LinkListApp {
   public static void main(String[] args){
	   LinkList arr=new LinkList();
	   arr.insertFirst(22, 2.4);
	   arr.insertFirst(34, 9.8);
	   arr.insertFirst(12, 2.2);
	   arr.insertFirst(33, 3.3);
	   arr.delete(33);
	   arr.displayAll();
       arr.check(12).displayLink();
//	   while(!arr.isEmpty()){
//		arr.deleteFirst();
//		arr.displayAll();
//	   }
   }
}

//双端链表就是在单链表的第一个节点存在last指向最后的节点

public class Link {
   private long value;
   public Link next;
   
   public Link(long n){
	   value=n;
   }
   
   public void displayLink(){
	   System.out.println(value);
   }
   
   public long getvalue(){
	   return value;
   }
   
}

public class LinkList {
   private Link first;
   private Link last;
   
   public LinkList(){
	   first=null;
	   last=null;
   }
   
   public void insertFirst(long data){
	   Link l=new Link(data);
	   if(isEmpty()){
		   first=l;
		   last=l;
	   }else l.next=first;
	   first=l;
   }
   
   public void insertLast(long data){
	   Link l=new Link(data);
	   if(isEmpty()){
		   first=l;
		   last=l;
	   }else{ 
		   last.next=l;
	       last=l;
       }
   }
   
   public boolean isEmpty(){
	   return first==null;
   }
   
   public void display(){
	   System.out.println("first->last:");
	   Link current=first;
	   while(!isEmpty() && current!=null){
		   current.displayLink();
		   current=current.next;
	   }
   }
   
   public long deleteFirst(){
	   long temp=first.getvalue();
	   if(first==null){
		   System.out.println("Empty Link");
	   }
	   else if(first.next==null){
		   last=null;
		   first=null;
	   } else first=first.next;
	   return temp;
   }
   
   public long deleteLast(){
	   long temp=last.getvalue();
	   Link current=first;
	   if(first==null){
		   System.out.println("Empty Link");
	   }
	   else if(first.next==null){
		   last=null;
		   first=null;
	   }else{  
		   while(!isEmpty()){
		   if(current.next==last) break;
		   current=current.next;
	   }
		   last=current;
		   last.next=null;
	   }
	   return temp;
   }
}

public class LinkflApp {
  public static void main(String[] args){
	  LinkList arr=new LinkList();
	  arr.insertFirst(22);
	  arr.insertFirst(44);
	  arr.insertFirst(66);
	  arr.insertLast(11);
	  //arr.deleteFirst();
	  arr.deleteLast();
	  arr.display();
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值