Java数据结构——单链表的初始化,建立,求表长,查找(按值查找、按序号查找),插入,删除,输出

package LinkedList;

class ListNode {
    int val;
    ListNode next;

    public ListNode(int val){
        this.val=val;
        this.next=null;
    }
}
class LinkedList{

    public static void main(String[] args) {
        int[] values=new int[]{1,2,3,4,5};
        LinkedList linkedList=new LinkedList();
        //初始化链表
        linkedList.createList(values);
        //打印链表
        linkedList.display();
        //得到链表长度
        System.out.println("链表的长度是:"+linkedList.getLength());
        //查找结点——按值查找
        linkedList.searchByValue(6);
        //查找结点——按索引查找
        linkedList.searchByIndex(3);
        //插入结点
        System.out.println("插入以后:");
        linkedList.insertList(5,188);
        linkedList.display();
        //删除节点
        System.out.println("测试删除结点:");
        linkedList.deleteList(5);
        linkedList.display();
    }

    ListNode head;

    public LinkedList(){
        head=null;
    }

    //初始化链表(尾插法)
    public void createList(int[] values){
        if(values==null || values.length==0){
            return;
        }
        head=new ListNode(values[0]);
        ListNode tail=head;
        for(int i=1;i< values.length;i++){
            ListNode newNode=new ListNode(values[i]);
            tail.next=newNode;
            tail=newNode;
        }
    }

    //求链表长度
    public int  getLength(){
        ListNode temp=head;
        int length=0;
        while (temp!=null){
            length++;
            temp=temp.next;
        }
        return length;
    }

    //查找结点——按值查找
    public void searchByValue(int searchVal){
        ListNode temp=head;
        int index=1;
        while(temp!=null){
            if(temp.val==searchVal){
                break;
            }
            temp=temp.next;
            index++;
        }
        if(temp==null){
            System.out.println("没有你要找的结点");
        }else{
            System.out.println("你要找的结点在:"+index);
        }
    }

    //查找结点——按索引查找
    public void searchByIndex(int index){
        boolean flag=true;
        if(index<0 || index>=getLength()){
            flag=false;
        }
        ListNode temp=head;
        int location=0;
        while(temp!=null && location<index){
            temp=temp.next;
            location++;
        }
        if(flag){
            System.out.println("你要找的结点的值是:"+temp.val);
        }else {
            System.out.println("输入的索引不正确");
        }
    }

    //插入结点
    public void insertList(int index,int val){
        if(index<0 ) {
            System.out.println("你输入的索引越界了");
            return;
        }
        ListNode insertList=new ListNode(val);
        if(index==0){
            insertList.next=head;
            head=insertList;
            return;
        }
        ListNode temp=head;
        int curr=0;
        while(curr<index-1){
            curr++;
            temp=temp.next;
        }
        insertList.next=temp.next;
        temp.next=insertList;
    }

    //删除结点
    public void deleteList(int index){
        if(index<0){
            System.out.println("你输入的位置越界了");
            return;
        }
        if(index==0){
            head=head.next;
            return;
        }
        int curr=0;
        ListNode temp=head;
        while (curr<index-1){
            curr++;
            temp=temp.next;
        }
        temp.next=temp.next.next;
    }


    //输出链表
    public void display(){
        ListNode temp=head;
        while(temp!=null){
            System.out.print(temp.val+" ");
            temp=temp.next;
        }
        System.out.println();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值