[英]Recursively Add Node to Linked List at Specific Index
我正在編寫一個遞歸函數,該函數將通過遞歸迭代到索引然后添加項目,從而將給定索引的項目添加到列表中。 該函數應接受2個參數(字符串值和整數索引),並檢查索引是否有效。 到目前為止,這是我目前不檢查有效性的內容,僅在僅傳入String值時才有效。
測試台(主)
public class TestBench {
public static void main(String[] args) {
RecLinkedList list = new RecLinkedList();
list.add("A");
list.add("B");
list.add("D");
list.add("C", 2);
list.add("E", 4);
list.add("G", 6); //this should be invalid
System.out.println( list );
System.out.println( list.remove( 1 ).getValue() );
System.out.println( list.remove("D").getValue() );
System.out.println( list.remove("G").getValue() );
System.out.println( list.size() );
System.out.println( list );
}
鏈表類
public class RecLinkedList {
private Node first;
public RecLinkedList(){
first = null;
}
public boolean isEmpty() {
return first == null;
}
public void add( String s){
first = add( s, first);
}
private Node add( String s, Node list){
if( list == null ){
return new Node(s);
}else{
list.setNext( add( s, list.getNext() ) );
return list;
}
}
public String toString() {
return helperString(first);
}
private String helperString(Node list) {
if (list.getNext() != null) {
return list.getValue() + "," + helperString(list.getNext());
}
else {
return (String) list.getValue();
}
}
我需要幫助的是,我是否需要制作另一個同時包含兩個參數(字符串和整數值)的添加函數,或者是否可以修改自己擁有的函數? 另外,至於檢查索引是否有效,我不確定如何檢查。
最好編寫另一個帶有String
和int
參數的add方法,因為與其他add函數相比,它的行為不同。 如果您查看Java API中的許多類,則方法名將被重載。 因此,這是一個好習慣。
為了確定索引是否有效,您首先需要聲明一個字段,該字段包含鏈接列表的當前大小。 每次添加或刪除元素時,此計數器都會更新。 調用新的add方法時,首先需要檢查要在其中插入新元素的索引是否小於零或大於鏈接列表的大小。 如果它小於零,則該索引無效。 如果它大於列表的大小,那么這沒有意義,因此您可以拒絕它,也可以將元素更多地添加到列表的末尾。
關於有效索引,您可以添加一個計算現有節點數的大小字段。
public class RecLinkedList {
private int size = 0;
//...
private Node add( String s, Node list){
if( list == null ){
this.size += 1;
return new Node(s);
}else{
list.setNext( add( s, list.getNext() ) );
return list;
}
}
//...
}
然后,在使用方法public void add(String value, int index)
添加新Node時public void add(String value, int index)
您可以檢查index是否大於當前大小或小於零。
要將節點添加到正確的位置,只需計算您已經訪問過的節點數,並在到達正確的位置時添加節點即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.