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 Java新项目启动报错
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了
  • ¥15 Sharepoint JS开发 付费技术指导
  • ¥15 输入程序运行仿真后,烟雾值不实时检测,变成固定值
  • ¥20 数据排序,可选择排序方向
  • ¥15 修改一下代码,考虑进程到达时间不同的情况
  • ¥15 帮我看看这是个啥题,带解题过程和结果,条件如下FCF = 290471.33 g1 = 15% r = 8% g2 = 4% n = 5
  • ¥15 edem模拟颗粒不显示或者生成失败
  • ¥15 Python代码编写