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