java实现单向链表的常用操作

  1. import java.util.*;  
  2.   
  3. //结点类,构造出结点所需要的成员变量  
  4. class Node{  
  5.     private int data;  
  6.     private Node next;  
  7.       
  8.     public void setData(int data){  
  9.         this.data=data;  
  10.     }  
  11.     public int getData(){  
  12.         return this.data;  
  13.     }  
  14.     public void setNext(Node next){  
  15.         this.next=next;  
  16.     }  
  17.     public Node getNext(){  
  18.         return this.next;  
  19.     }  
  20. }  
  21.   
  22. //在这个链表类里定义对链表的各种操作  
  23. public class singleLinkList {  
  24.     public Node head;  
  25.       
  26.     //尾插法创建链表,如果用头插法的话得到的单链表的逻辑顺序与输入的顺序相反  
  27.     //所以头插法也叫逆序建表法,我们这里用尾插法  
  28.     public void createLink(int [] a){  
  29.         Node newNode;  
  30.         Node tail = new Node();  
  31.         head=tail;  
  32.         for(int i=0;i<a.length;i++){  
  33.             newNode=new Node();  
  34.             newNode.setData(a[i]);  
  35.             tail.setNext(newNode);  
  36.             newNode.setNext(null);  
  37.             tail=newNode;  
  38.         }  
  39.     }  
  40.       
  41.     //输出链表里的所有元素  
  42.     public void printLink(){  
  43.         Node node1;  
  44.         node1=head.getNext();  
  45.         while(node1!=null)  
  46.         {  
  47.             System.out.print(node1.getData()+"->");  
  48.             node1=node1.getNext();  
  49.         }  
  50.         System.out.print("null");  
  51.         System.out.println();  
  52.     }  
  53.       
  54.     //按值查找  
  55.     public void searchByValue(int s){  
  56.         Node tmp = new Node();  
  57.         tmp=head.getNext();  
  58.         while(tmp!=null&&tmp.getData()!=s){  
  59.             tmp=tmp.getNext();  
  60.         }  
  61.         if(tmp==null){  
  62.             System.out.println("要找的数在链表里不存在!");  
  63.         }  
  64.         //这里如果还用if去判断就会导致空指针异常,因为当tmp==null的时候它还会去判断,所以用else就好了  
  65.         else{  
  66.             System.out.println("已找到!");  
  67.         }     
  68.     }  
  69.       
  70.     //插入(在链表的第no个结点前插入一个值为val的结点)  
  71.     public void insertLink(int no,int val){  
  72.         Node newNode= new Node();  
  73.         Node mid=new Node();  
  74.         mid=head;  
  75.         newNode.setData(val);  
  76.         for(int i=1;i<no;i++){  
  77.             mid=mid.getNext();  
  78.         }  
  79.         Node use=new Node();  
  80.         use=mid.getNext();  
  81.         mid.setNext(newNode);  
  82.         newNode.setNext(use);     
  83.     }  
  84.       
  85.     //删除第no个元素  
  86.     public void delete(int no){  
  87.         Node mid = new Node();  
  88.         Node travel = new Node();  
  89.         travel =head;  
  90.         for(int i=1;i<no;i++)  
  91.         {  
  92.             travel=travel.getNext();  
  93.         }  
  94.         mid=travel.getNext();  
  95.         mid=mid.getNext();  
  96.         travel.setNext(mid);  
  97.     }  
  98.       
  99.     public static void main(String args[]){  
  100.         int a[]=new int[10];  
  101.         singleLinkList list=new singleLinkList();  
  102.         for(int i=0;i<a.length;i++){  
  103.             a[i]=i;  
  104.         }  
  105.         list.createLink(a);  
  106.         list.printLink();  
  107.         list.searchByValue(8);  
  108.         list.searchByValue(22);  
  109.         list.insertLink(522);  
  110.         list.printLink();  
  111.         list.delete(5);  
  112.         list.printLink();  
  113.     }  
  114. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值