m0_62282054 2022-09-21 22:42 采纳率: 89.6%
浏览 26
已结题

为什么输入数据输出不了东西,应该怎么修改


package DateStructuresHomework;

import homework.F;

public class SingleLinkedList {
    private Node head=new Node("");
    public void insert(Node Node)
    {
        Node temp=head;
        while (true)
        {
            if (temp.next==null)
                break;
            temp=temp.next;

        }
        temp.next=Node;
        display();


    }
    public void delete(int no)
    {
        Node temp=head;

        for (int i = 0; i <no ; i++)
        {
            temp=temp.next;
        }
        temp.next=temp.next.next;
        display();
    }
    public void find(Object x)
    {
        Node temp=head;
        int n=0;
        while (temp.next==null)
        {
            if (temp.val==x)
            {

                break;
            }
            n++;
        }
        System.out.println(n);
    }
    public void display()
    {
        Node temp=head;
        while (temp.next==null)
            System.out.print(temp.val+" ");
    }





}

class Node{
    public Object val;
    public Node next;


    public Object getVal() {
        return val;
    }

    public void setVal(Object val) {
        this.val = val;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Node(Object val) {
        this.val = val;
    }
}





class Test2
{
    public static void main(String[] args) {
        Node node1=new Node(1);
        Node node2=new Node(2);
        SingleLinkedList singleLinkedList=new SingleLinkedList();
        singleLinkedList.insert(node1);
        singleLinkedList.insert(node2);
        singleLinkedList.display();
    }
}

img

  • 写回答

1条回答 默认 最新

  • 梦里逆天 2022-09-22 08:58
    关注

    可参考:https://blog.csdn.net/qq_69133469/article/details/124312857https://blog.csdn.net/u011723409/article/details/125456921

    import java.util.Scanner;
    
    public class SingleLinkedList<T> {
        //结点定义
        private class Node{
            //数据
            T item;
            //指向下一个结点
            Node next;
            //构造器
            public Node(T item,Node next){
                this.item = item;
                this.next = next;
            }
            public Node(T item){
                this.item = item;
            }
        }
        //头结点
        private Node head;
        //尾结点
        private Node tail;
        //结点个数
        private int size;
    
        //链表定义
        public SingleLinkedList(){
            this.head = new Node(null,null);
            size = 0;
        }
    
        //查找特定位置的链表结点
        public Node get(int index) {
            if (index <0 || index >=this.size){
                return null;
            }else{
                Node temp = this.head;
                for(int i =1; i<= index; i++){
                    temp = temp.next;
                }
                return temp;
            }
        }
    
        public void add(T data){
            Node temp = new Node(data);
            //链表为空时
            if (this.size == 0){
                head = temp;
                tail = head;
            }else{
                Node last  =  tail;
                last.next = temp;
                this.tail = temp;
            }
            this.size ++;
        }
    
        //在链表的第i个位置插入一个值为t数据
        public void insert(int index ,T data) throws Exception{
            if(index <0 ||index > this.size){
                throw new Exception("插入超出范围");
            }else{
                Node newNode = new Node(data);
                //在头结点插入元素
                if (index ==0){
                    if(this.size >0){
                        Node temp = head;
                        newNode.next = temp;
                    }
                    head = newNode;
                }
                //在尾结点插入元素
                else if(index == this.size){
                    Node temp = tail;
                    temp.next = newNode;
                    this.tail  = newNode;
    
                }else{
                    //在中间插入元素
                    Node preNode = get(index-1);
                    Node nextNode = preNode.next;
                    newNode.next = nextNode;
                    preNode.next = newNode;
    
                }
    
            }
            this.size ++;
    
            if(size == 1){
                tail = head;
            }
        }
    
        //删除特定位置的数据
        public void del(int index )throws Exception{
            if (index <0 ||index >=this.size){
                throw new Exception("删除超出范围");
            }else{
                //删除头结点
                if (index == 0){
                    Node temp = this.head.next;
                    this.head = temp;
    
                }else if(index == this.size-1){    //删除尾结点
                    Node preNode = get(index -1);
                    this.tail = preNode;
                    preNode.next = null;
                }else{
                    //删除中间结点
                    Node preNode = get(index -1);
                    Node nextNode = preNode.next.next;
                    preNode.next = nextNode;
                }
    
            }
            this.size --;
    
        }
    
        public void printLinkList(){
            if(this.size ==0){
                System.out.println("链表为空");
            }
            else {
                Node temp = head;
                System.out.print("目前的列表,头结点:" + head.item + ",尾结点:" + tail.item + ",整体:");
                while (temp != null) {
                    System.out.print(temp.item + ",");
                    temp = temp.next;
                }
                System.out.println();
            }
    
        }
    
        public static void main(String args[]) throws Exception {
            SingleLinkedList linkList = new SingleLinkedList();
            int[] numbers = new int[20];
            Scanner scanner = new Scanner(System.in);
            int num, i = 0;
            while(scanner.hasNextInt())
            {
                num = scanner.nextInt();
                if (num != 0)
                {
                    numbers[i] = num;
                    i++;
                }else{
                    break;
                }
            }
            System.out.println(i);
            for(int j=i-1; j>=0; j--)
            {
                System.out.println(numbers[j]);
                linkList.add(numbers[j]);
            }
            linkList.printLinkList();
            
            // 在指定索引插入值
            int index_insert, insert_val;
            Scanner scanner1 = new Scanner(System.in);
            index_insert = scanner1.nextInt();
            insert_val = scanner1.nextInt();
            linkList.insert(index_insert, insert_val);
            linkList.printLinkList();
            
            // 删除指定索引位置的值
            int del_index;
            del_index = scanner1.nextInt();
            linkList.del(del_index);
            linkList.printLinkList();
            
            // 获取指定索引位置的值
            int find_index;
            find_index = scanner1.nextInt();
            int result = (int) linkList.get(find_index).item;
            System.out.println(result);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示