Java 中间链表插入

Java 中间链表插入,java,data-structures,linked-list,insertion,Java,Data Structures,Linked List,Insertion,及 为什么“i”不能正确递增?如果它工作正常,那么我可以在中间执行插入。问题不在于for循环,而是:该方法被调用了3次 我刚刚将您的部分代码更改为: Exception in thread "main" java.lang.NullPointerException at Node.InsertNth(Solution.java:49) at Solution.main(Solution.java:88) 它正在印刷 i :0 count: 1 i :0 i :1 count:


为什么“i”不能正确递增?如果它工作正常,那么我可以在中间执行插入。

问题不在于
for
循环,而是:该方法被调用了3次

我刚刚将您的部分代码更改为:

Exception in thread "main" java.lang.NullPointerException
    at Node.InsertNth(Solution.java:49)
    at Solution.main(Solution.java:88)
它正在印刷

i :0
count: 1
i :0
i :1
count: 2
i :0
i :1
i :2
i :3
count: 3
3次意味着你的方法被调用三次,而不是像你所想的那样调用一次

要编写正确的代码,只需确保for循环中的
start
不为null即可。我并没有试图更改您的代码,只是添加了使其工作所必需的内容

    System.out.println("count: " +count);
节点插入(节点头、int数据、int位置){
节点开始、当前、温度;
开始=头部;
curr=开始;
如果(开始==null | |位置==0)
{
temp=新节点();
温度数据=数据;
下一步温度=开始;
压头=温度;
回流头;
}
其他的
{

对于(int i=0;i而言,问题不在于
for
循环,问题在于:该方法被调用了3次

我刚刚将您的部分代码更改为:

Exception in thread "main" java.lang.NullPointerException
    at Node.InsertNth(Solution.java:49)
    at Solution.main(Solution.java:88)
它正在印刷

i :0
count: 1
i :0
i :1
count: 2
i :0
i :1
i :2
i :3
count: 3
3次意味着你的方法被调用三次,而不是像你所想的那样调用一次

在编写正确的代码时,只需确保for循环中的
start
不为null。我没有尝试更改代码,只是添加了使其正常工作所必需的内容

    System.out.println("count: " +count);
节点插入(节点头、int数据、int位置){
节点开始、当前、温度;
开始=头部;
curr=开始;
如果(开始==null | |位置==0)
{
temp=新节点();
温度数据=数据;
下一步温度=开始;
压头=温度;
回流头;
}
其他的
{

对于(int i=0;i而言,问题不在于
for
循环,问题在于:该方法被调用了3次

我刚刚将您的部分代码更改为:

Exception in thread "main" java.lang.NullPointerException
    at Node.InsertNth(Solution.java:49)
    at Solution.main(Solution.java:88)
它正在印刷

i :0
count: 1
i :0
i :1
count: 2
i :0
i :1
i :2
i :3
count: 3
3次意味着你的方法被调用三次,而不是像你所想的那样调用一次

在编写正确的代码时,只需确保for循环中的
start
不为null。我没有尝试更改代码,只是添加了使其正常工作所必需的内容

    System.out.println("count: " +count);
节点插入(节点头、int数据、int位置){
节点开始、当前、温度;
开始=头部;
curr=开始;
如果(开始==null | |位置==0)
{
temp=新节点();
温度数据=数据;
下一步温度=开始;
压头=温度;
回流头;
}
其他的
{

对于(int i=0;i而言,问题不在于
for
循环,问题在于:该方法被调用了3次

我刚刚将您的部分代码更改为:

Exception in thread "main" java.lang.NullPointerException
    at Node.InsertNth(Solution.java:49)
    at Solution.main(Solution.java:88)
它正在印刷

i :0
count: 1
i :0
i :1
count: 2
i :0
i :1
i :2
i :3
count: 3
3次意味着你的方法被调用三次,而不是像你所想的那样调用一次

在编写正确的代码时,只需确保for循环中的
start
不为null。我没有尝试更改代码,只是添加了使其正常工作所必需的内容

    System.out.println("count: " +count);
节点插入(节点头、int数据、int位置){
节点开始、当前、温度;
开始=头部;
curr=开始;
如果(开始==null | |位置==0)
{
temp=新节点();
温度数据=数据;
下一步温度=开始;
压头=温度;
回流头;
}
其他的
{

对于(int i=0;i首先,为什么
返回头;
在前两种情况下?
temp
是列表的新头,应该返回

其次,您的循环是正确的。但是,Hackerrank运行多个测试用例。我键入了一个解决方案,并在方法调用的开头插入了换行符。您只需要执行三个测试用例

Node InsertNth(Node head, int data, int position) {
     Node start,curr,temp;
     start=head;
     curr=start;
     if(start==null || position == 0)
     {
        temp=new Node();
        temp.data=data;
        temp.next=start;
        head=temp;
        return head;
     }
     else
    {
        for(int i=0;i<position && start!=null ;i++)
        {
         curr=start;
         start=start.next;
        }
        temp=new Node();
        temp.data=data;
        curr.next=temp;
        temp.next=start;
        return head;
    } 
 }

改进
  • 您必须始终创建一个新节点,因此重构该节点以使代码更干净

  • 您不需要进行
    start==null
    检查,因为只要
    position==0
    就可以将旧头(可能是
    null
    )附加到末尾

  • 插入改进后:

    i: 0
    
    i: 0
    i: 1
    
    i: 0
    i: 1
    i: 2
    i: 3
    
    节点插入(节点头、int数据、int位置){
    节点温度=新节点();
    温度数据=数据;
    节点开始=头部;
    节点电流=开始;
    如果(位置==0)
    {
    温度下一步=开始;
    返回温度;
    } 
    其他的
    {
    对于(int i=0;i
    首先,为什么
    返回头;
    在前两种情况下?
    temp
    是列表的新头,应该返回

    其次,您的循环是正确的。但是,Hackerrank运行多个测试用例。我键入了一个解决方案,并在方法调用的开头插入了换行符。您只需要执行三个测试用例

    Node InsertNth(Node head, int data, int position) {
         Node start,curr,temp;
         start=head;
         curr=start;
         if(start==null || position == 0)
         {
            temp=new Node();
            temp.data=data;
            temp.next=start;
            head=temp;
            return head;
         }
         else
        {
            for(int i=0;i<position && start!=null ;i++)
            {
             curr=start;
             start=start.next;
            }
            temp=new Node();
            temp.data=data;
            curr.next=temp;
            temp.next=start;
            return head;
        } 
     }
    

    改进
  • 您必须始终创建一个新节点,因此重构该节点以使代码更干净

  • 您不需要进行
    start==null
    检查,因为只要
    position==0
    就可以将旧头(可能是
    null
    )附加到末尾

  • 插入改进后:

    i: 0
    
    i: 0
    i: 1
    
    i: 0
    i: 1
    i: 2
    i: 3
    
    节点插入(节点头、int数据、int位置){
    节点温度=新节点();
    温度数据=数据;
    节点开始=头部;
    节点电流=开始;
    如果(位置==0)
    {
    温度下一步=开始;
    返回温度;
    } 
    其他的
    {
    对于(int i=0;i
    首先,为什么
    返回头;
    在前两种情况下?
    temp
    是列表的新头,应该返回

    其次,您的循环是正确的。但是,Hackerrank运行多个测试用例。我键入了一个解决方案,并在方法调用的开头插入了换行符。您只需使用三个测试c