- import java.util.*;
- //结点类,构造出结点所需要的成员变量
- class Node{
- private int data;
- private Node next;
- public void setData(int data){
- this.data=data;
- }
- public int getData(){
- return this.data;
- }
- public void setNext(Node next){
- this.next=next;
- }
- public Node getNext(){
- return this.next;
- }
- }
- //在这个链表类里定义对链表的各种操作
- public class singleLinkList {
- public Node head;
- //尾插法创建链表,如果用头插法的话得到的单链表的逻辑顺序与输入的顺序相反
- //所以头插法也叫逆序建表法,我们这里用尾插法
- public void createLink(int [] a){
- Node newNode;
- Node tail = new Node();
- head=tail;
- for(int i=0;i<a.length;i++){
- newNode=new Node();
- newNode.setData(a[i]);
- tail.setNext(newNode);
- newNode.setNext(null);
- tail=newNode;
- }
- }
- //输出链表里的所有元素
- public void printLink(){
- Node node1;
- node1=head.getNext();
- while(node1!=null)
- {
- System.out.print(node1.getData()+"->");
- node1=node1.getNext();
- }
- System.out.print("null");
- System.out.println();
- }
- //按值查找
- public void searchByValue(int s){
- Node tmp = new Node();
- tmp=head.getNext();
- while(tmp!=null&&tmp.getData()!=s){
- tmp=tmp.getNext();
- }
- if(tmp==null){
- System.out.println("要找的数在链表里不存在!");
- }
- //这里如果还用if去判断就会导致空指针异常,因为当tmp==null的时候它还会去判断,所以用else就好了
- else{
- System.out.println("已找到!");
- }
- }
- //插入(在链表的第no个结点前插入一个值为val的结点)
- public void insertLink(int no,int val){
- Node newNode= new Node();
- Node mid=new Node();
- mid=head;
- newNode.setData(val);
- for(int i=1;i<no;i++){
- mid=mid.getNext();
- }
- Node use=new Node();
- use=mid.getNext();
- mid.setNext(newNode);
- newNode.setNext(use);
- }
- //删除第no个元素
- public void delete(int no){
- Node mid = new Node();
- Node travel = new Node();
- travel =head;
- for(int i=1;i<no;i++)
- {
- travel=travel.getNext();
- }
- mid=travel.getNext();
- mid=mid.getNext();
- travel.setNext(mid);
- }
- public static void main(String args[]){
- int a[]=new int[10];
- singleLinkList list=new singleLinkList();
- for(int i=0;i<a.length;i++){
- a[i]=i;
- }
- list.createLink(a);
- list.printLink();
- list.searchByValue(8);
- list.searchByValue(22);
- list.insertLink(5, 22);
- list.printLink();
- list.delete(5);
- list.printLink();
- }
- }
java实现单向链表的常用操作
最新推荐文章于 2022-05-06 19:40:56 发布