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 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)