加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java---单链表操作

发布时间:2020-12-15 07:20:07 所属栏目:Java 来源:网络整理
导读:实验目的 巩固链表创建、查找、插入、删除等基本操作,复习巩固Java语法知识。 代码实现 import java.util.*;public class Test20{ public static void main(String[] args) { Scanner In=new Scanner(System.in); int n=In.nextInt(); Node head=null; head

实验目的

巩固链表创建、查找、插入、删除等基本操作,复习巩固Java语法知识。

代码实现

import java.util.*;
public class Test20
{
    public static void main(String[] args) 
    {
        Scanner In=new Scanner(System.in);
        int n=In.nextInt();
        Node head=null;
        head=creat(n);
        search1(head,2,n);   //依据所给位置:查询第二个元素的值;
        search2(head,5);     //依据所给数值:查找前、后驱节点,此步查询3的节点;
        head=Insert(head,4,99);  //在第四个节点后插入新节点,并赋值为99;
        head=delete(head,3,n);   //删除第3个节点;
        print(head);
    }

    public static Node creat(int n){   //创建
        Node p=null;
        Node head=null;
        
        for(int i=0;i<n;i++){        //尾插法
            Node newnode=new Node(i);   //初始化链表数据
            if(head==null){
                head=newnode;
                p=head;}
            else{
                p.next=newnode;
                newnode.next=null;
                p=newnode;}
        }
        return head;
    }

    public static void search1(Node head,int x,int n){  //依据所给位置查找
        Node p=head;
        if(x<1||x>n){
            System.out.println("error");
            return ;}

        else{
            for(int i=0;i<x-1;i++){
                p=p.next;}
            System.out.println(p.date);
        }
        }

    public static void search2(Node head,int m){
        Node p=head;
        Node pre=head;
        
        if(head==null||head.next==null){
            System.out.println("error");   //当链表为空或者只有一个头节点时,无前后驱节点;
            return ;}
        else{
            while(p!=null){
                if(p.date!=m){
                    p=p.next;}

                if(pre.next.next==p){
                    pre=pre.next;}   //pre移动判定,保证pre在p之前

                if(p.date==m||p==null){   //不加这个条件就可能挑不出循环,当p.date==m时,p不移动,死循环!
                    break;}
                }
                    
                
                 if(p==head){
                    System.out.printf("无前驱节点,后驱节点为%dn",p.next.date);}
                 else if(p.next==null){
                    System.out.printf("无后驱节点,前驱节点为%dn",pre.date);}
                 else{
                    System.out.printf("前驱节点为%d,后驱节点为%dn",pre.date,p.next.date);}
                    }
            }

    public static Node Insert(Node head,int y,int e){    //插入

        Node newnode=new Node(e);
        Node p=head;
        Node q=head.next;
        for(int i=0;i<y-1;i++){
            p=p.next;
            q=q.next;}
        p.next=newnode;
        newnode.next=q;
        return head;
    }
 
    public static Node delete(Node head,int z,int n){    //删除
        if(z<1||z>n){
            System.out.println("error");
            return head;}
        else{
            Node p=head.next;
            Node q=p.next;
            Node pre=head;
            if(z==1){
                head=head.next;
                return head;}
            else{
                for(int i=0;i<z-2;i++){
                    p=p.next;    //删除p所在的位置;
                    q=p.next;
                    pre=pre.next;}
                    pre.next=q;
                }
            }
            return head;
        }

    public static void print(Node head){
        Node p=head;
        while(p!=null){
            System.out.printf("%d ",p.date);
            p=p.next;}
            System.out.println();
    }

}


class Node
{
    public Node(int date){
        this.date=date;
    }
    int date;
    Node next;
}

重点提醒

在标记当前元素的前一个节点时,一个while循环实现标记并查找。

实验总结

通过本次Java实现,再一次巩固了Java语法,熟悉了链表的各种操作,也算是一种进步吧,希望以后再接再厉吧!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读