2013-12-02 1 views
1

Я пытаюсь определить, является ли значение членом в ссылке. если он является членом, он вернет true, иначе он вернет false. Я пытаюсь сделать этоПроверьте, существует ли элемент связанного списка

public boolean member(Integer val){ 
    if(node.val.equals(val) || node.next.val.equals(val)){ 
     System.out.println("true"); 
     return true; 
    } 
    return false; 
} 

Однако, это только проверить значение головы и стоимости следующей главы. Что было бы другим способом проверить значение всего узла?

+0

Откуда возникает «узел»? Это внутренний метод? – Dropout

+1

Вам нужно будет использовать цикл для просмотра всех значений в списке. Учебное пособие: [Входящие и сделанные показы] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html) – Jesper

+0

Что такое 'node'? – sp00m

ответ

3

Просто передайте корневой узел и петлю через LinkedList:

public boolean member(Node root, Integer val){ 
    Node currentNode = root;//keep track of current node 
    while(currentNode != null){ 
     //switched currentNode.val and val to avoid null pointer exceptions 
     if(val.equals(currentNode.val)){ 
     //if you're looking for nulls...still with the original 
     //if(currentNode.val.equals(val)){ 
      System.out.println("true"); 
      return true; 
     } 
     currentNode = root.next();//update current node 
    } 
    return false; 
} 
+0

@MarkoTopolnik Извините, я написал это буквально через 20 секунд. Должно быть хорошо сейчас –

+0

@MarkoTopolnik updatttttttttttttttttttted –

+0

Лучше использовать 'val.equals (currentNode.val)', чтобы избежать 'NPE', если' currentNode.val' является 'null'. – sp00m

0

вы можете использовать этот код ..

boolean exists = linkedList.contains("element");  
System.out.println("element exists in LinkedList ? : " + exists); 
+3

Я думаю, он пишет свой собственный LinkedList .. Ваше решение не имеет значения. – Maroun

+0

Это будет работать для встроенного 'LinkedList'. Но я не думаю, что это то, что использует OP. –

2

Ok без рекурсии:

public boolean member(Integer val){ 
    Node current = node; 
    while (current != null) { 
    if (current.val.equals(val)) { 
     return true; 
    } else { 
     current = current.next; 
    } 
    } 
    return false; 
} 
+0

Рекурсия действительно не нужна. Либо просто выполните цикл через него, либо используйте метод 'contains()'. – Dropout

+3

bye bye stack ... – Bathsheba

+0

Неэффективен для больших списков в Java. Нет хвостовой рекурсии. – duffymo

-1

Это потому, что вы не приращением значения узла в конце цикла. Также выполните нулевую проверку, чтобы проверить конец.

 public boolean member(Integer val){ 
      if(node.next!=null){ 
      if(node.val.equals(val) || node.next.val.equals(val)){ 
       System.out.println("true"); 
       node = node.next; // incrementing the node value 
       return true; 
      } 
      return false; 
     } 
    } 
    else { 
    if(node.val.equals(val)){ 
    return true; 
    } 
else{ 
return false; 
} 
    } 
+0

@downvoter, почему downvote, комментарий к ошибке будет очень благодарен – user1801279

0
{ 
    if (s.length() == 0) { 
     rvFriendsList.setVisibility(View.VISIBLE); 
     rvSearch_Friends.setVisibility(View.GONE); 
     FriendsType ="actual"; 
    } 
    if (s.length() >= 1) { 
     FriendsType ="search"; 
     rvFriendsList.setVisibility(View.GONE); 
     rvSearch_Friends.setVisibility(View.VISIBLE); 
     rvSearch_Friends.bringToFront(); 
     btnCancel.setTextColor(getResources().getColor(R.color.red)); 
     String searchString = s.toString().toLowerCase(Locale.getDefault()); 
     Log.d("@w2w2w2w", "" + searchString); 
     int realtext = searchString.length(); 
     linkedList_SearchUser.clear(); 
     for (int i = 0; i < linkList_GetAllContacts.size(); i++) { 
      String currentString = linkList_GetAllContacts.get(i).get("first_name").toString(); 
      if (realtext <= currentString.length()) { 
       if (searchString.equalsIgnoreCase(currentString.substring(0, realtext))) { 
        linkedList_SearchUser.add(linkList_GetAllContacts.get(i)); 
        hype1 = new Custom_Adapter_GetAllContacts((Activity) context, linkedList_SearchUser); 
        LinearLayoutManager llm = new LinearLayoutManager(context); 
        llm.setOrientation(LinearLayoutManager.VERTICAL); 
        rvSearch_Friends.setLayoutManager(llm); 
        rvSearch_Friends.setAdapter(hype1); 
       } 
      } else { 
       hype1.notifyDataSetChanged(); 
      } 
     } 
    } 
} 
1

Это решение использует булеву функцию, чтобы определить, если элемент существует в связанном списке.

public boolean doesValExist(int value){ 
    Node traveler = head; 
    while(traveler != null){ 
     if(traveler.getElement() == value){ 
      return true; 
     } 
     traveler = traveler.getNext(); 
    } 
    return false; 
}