m0_64087086 2022-11-25 08:38 采纳率: 100%
浏览 8
已结题

Java链表,运行结果不正确,看看哪里错了

是我的类写错了,还是主函数写错,怎么一直运行不正确??
插不进值
主函数

import java.io.IOException;
import java.util.Scanner;
public class test {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入链表长度n:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        Scanner li = new Scanner(System.in);
        int[] b = new int[n];
        for (int i = 0; i < b.length; i++) {
            b[i] = li.nextInt();
        }
        LinkListClass p = new LinkListClass();
        p.CreatList(b);
        System.out.println(p.toString());
        
        System.out.println("请输入要插入的序号及元素");
        int i = scanner.nextInt();
        int e = scanner.nextInt();
        p.insert(i, e);
        System.out.println(p.toString());
    }
}

节点类

public class LinkNode {
    int data;
    LinkNode next;
    public LinkNode() {
        next=null;
    }
    public LinkNode(int d) {
        data =d;
        next=null;
    }
}
 

LinkListClass

public class LinkListClass {
        LinkNode head;
        public LinkListClass() {
            head=new LinkNode();
            head.next=null;
        }
        public void CreatList(int[] b) {
            LinkNode s ;
            for(int i=0;i<b.length;i++)
            {
                s=new LinkNode(b[i]);
                s.next=head.next;
                head.next=s;
            }    
        }    
    public String toString() {
            String anString="";
            LinkNode p=head.next;
            while (p!=null) {
                anString+=p.data+"";
                p=p.next;
            }
            return anString;
        }
        //第二题
    public int size() {
            LinkNode p=head;
            int cnt=0;
            while (p.next!=null) {
                cnt++;
                p.next=p;
            }
            return cnt;
        }
    public LinkNode geti(int i) {
            LinkNode p=head;
            int j=-1;
            while (j<1) {
                j++;
                p=p.next;
            }
            return p;
        }
    public void insert(int i,int e) {
            if(i<0||i>size())
                throw new IllegalArgumentException("设置长度n:不再有效的范围内");
        LinkNode sLinkList=new LinkNode(e);
        LinkNode pLinkList=geti(i-1);
        sLinkList.next=pLinkList.next;
        pLinkList.next=sLinkList;
        }

}
 

img

  • 写回答

3条回答 默认 最新

  • miaoch 2022-11-25 11:44
    关注

    size 方法死循环了。

    while (p.next!=null) {
                cnt++;
                p.next=p;
            }
    

    p.next = p 也就是head。那就变成head的next变成head,在里面出不来了。
    应该写成p = p.next;
    然后size不应该每次都重新计算,应该保存一个变量。add+1 remove -1就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月25日
  • 已采纳回答 11月25日
  • 修改了问题 11月25日
  • 修改了问题 11月25日
  • 展开全部

悬赏问题

  • ¥15 u盘问题:盘符不显示 无媒体
  • ¥50 R语言读取nc按月均值转为tif
  • ¥30 智能车串级pid调参
  • ¥15 visual studio code翻译老是错误
  • ¥20 卫星测高数据的高程转换
  • ¥15 爬取招聘网站数据信息
  • ¥15 安装完tensorflow,import tensorflow as tf后报错,如何解决?
  • ¥15 ultralytics库导出onnx模型,模型失去预测能力
  • ¥15 linux下点对点协议连接2个USB串口的硬件流量控制问题
  • ¥15 SQL数据自动生成问题