我被困在这个问题上。我的代码通过了示例中给出的所有测试用例,但代码中存在一些错误。请指出错误。Hackerearth删除朋友:运行时错误 - NZEC
问题陈述(https://www.hackerearth.com/problem/algorithm/remove-friends-5)
让她的博士学位后,克里斯蒂已经成为她的大学名人,她的Facebook个人资料是完整的好友申请。作为她的好女孩,克里斯蒂已经接受了所有的要求。
现在Kuldeep嫉妒她从其他人那里得到的所有关注,所以他让她从她的朋友名单中删除一些人。 为了避免“场景”,科视决定从朋友列表中删除一些朋友,因为她知道每个朋友的受欢迎程度,她使用以下算法删除朋友。
算法删除(朋友):
DeleteFriend=false
for i = 1 to Friend.length-1
if (Friend[i].popularity < Friend[i+1].popularity)
delete i th friend
DeleteFriend=true
break
if(DeleteFriend == false)
delete the last friend
输入: 第一行包含测试用例T编号。每个测试案例的第一行包含N,科视Christie目前拥有的朋友数量以及K,Christie决定删除的朋友数量。下一行包含她的朋友的空间分隔的流行。
输出: 对于每个测试用例,打印表示克里斯蒂朋友在删除K朋友之后流行的N-K数字。
备注 在删除完全K个朋友后,朋友的顺序应保持与输入中给定的一致。
我的解决方案
class TestClass {
static class Node
{
int data;
Node next;
Node(int d)
{
data = d;
next = null;
}}
static Node head = null;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int cases = Integer.parseInt(line);
for (int i = 0; i < cases; i++) {
line = br.readLine();
int friends = Integer.parseInt(line);
line = br.readLine();
int delete = Integer.parseInt(line);
head = null;
Node p =null;
for(int j=0;j < friends;j++){
line = br.readLine();
int temp = Integer.parseInt(line);
if(head == null){
head = new Node(temp);
p = head;
}
else{
Node q = new Node(temp);
p.next = q;
p = q;
}}
delete_friend(head , delete);
print_list(head);
}}
static void delete_friend(Node h, int delete){
Node p = head;
Node q = null;
int flag = 0;
for (int x = 1; x<=delete;x++){
p = head;
flag = 0;
q = p.next;
while(p.next != null){
q = p.next;
if(p.data < q.data){
p.data = q.data;
p.next = q.next;
flag=1;
p = head;
break;
}
if (flag == 0 && q.next == null){
if (p.data >= q.data) {
p.next = null;
break;
}}
p = p.next;
}}}
static void print_list(Node head){
Node tnode = head;
while (tnode != null)
{
System.out.print(tnode.data+" ");
tnode = tnode.next;
}
System.out.println();
}}