${line##*_}
在上面的代码中,我打印了" i"的值。在for循环中。 在控制台中,我将输出作为
$ while read line; do line=${line%%Match[Ffile]*}; line=${line##*_}; echo $line; done < filename
Accounts
AdGroup
Ads
Advertisers
Audience
并且
Node InsertNth(Node head, int data, int position) {
Node start,curr,temp;
start=head;
curr=start;
if(start==null)
{
temp=new Node();
temp.data=data;
temp.next=null;
return head;
}
else if(position==0)
{
temp=new Node();
temp.data=data;
temp.next=start;
return head;
}
else
{
for(int i=0;i<position;i++)
{
System.out.println("i:"+i);
curr=start;
start=start.next;
}
temp=new Node();
temp.data=data;
curr.next=temp;
temp.next=start;
return head;
}
}
为什么&#34;我&#34;没有正确递增?如果它运作良好,那么我可以在中间执行插入。
答案 0 :(得分:2)
问题不在于for
循环,问题是:该方法被调用3次
我刚刚将部分代码更改为:
else
{
int count =0;
for(int i=0;i<position;i++)
{
try{
System.out.println("i :" +i);
curr=start;
start=start.next;
count++;
}
catch(Exception e){
}
}
System.out.println("count: " +count);
temp=new Node();
temp.data=data;
curr.next=temp;
temp.next=start;
return head;
}
并在hackerrank中提交并打印:
i :0
count: 1
i :0
i :1
count: 2
i :0
i :1
i :2
i :3
count: 3
正在打印
System.out.println("count: " +count);
3次意味着你的方法被称为三次,而不是你想的一次。
为了编写正确的代码,请确保{for循环中start
不为空。我没有尝试更改您的代码,只是添加了使其工作所需的内容。
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;
}
}
答案 1 :(得分:1)
首先,为什么在前两个案例中return head;
? temp
是列表的新头,应该返回。
其次,你的循环是正确的。但是,Hackerrank 运行多个测试用例。我键入了一个解决方案,并在方法调用的开头插入换行符。您只需执行三个测试用例。
i: 0
i: 0
i: 1
i: 0
i: 1
i: 2
i: 3
您将始终必须创建一个新节点,以便重构以使您的代码更清晰。
您不需要start == null
检查,因为只要null
,您只需将旧头(可能是position == 0
)附加到末尾。
插入改进后:
Node InsertNth(Node head, int data, int position) {
Node temp = new Node();
temp.data = data;
Node start = head;
Node curr = start;
if (position == 0)
{
temp.next = start;
return temp;
}
else
{
for(int i = 0; i < position; i++)
{
curr=start;
start=start.next;
}
curr.next=temp;
temp.next=start;
return head;
}
}