[英]Removing all nodes from linked list (given a start and an end index)
我正在寫一個額外的removeRange()
方法,除了一個start index
和一個end index
作為參數。 我已經通過了所有條件,除了節點數等於從開始到結束的范圍時。
我的鏈表示例包含:
1 -> 2 -> 3
在調用方法removeRange(0,2)
:
list應該變為null
,因為從0到2,計數為3,所以列表中也有3個元素。
查看圖片,以更好地了解發生的情況。
碼:
public void removeRange(int start, int end) {
if(start < 0 || end < 0) {
throw new IllegalArgumentException();
}
if(start == 0 && end == 0) {
front = front.next;
} else if (start == 0 && end == 1) {
front = front.next.next;
} else {
ListNode head = front;
for(int i = 0; i < start-1;i++) {
head = head.next;
}
ListNode tail = front;
for(int i = 0; i < end;i++) {
tail = tail.next;
}
head.next = tail.next;
}
}
對任何鏈接的數據結構(列表,樹,圖形)進行編碼的最佳方法是獲得白板並繪制鏈接的列表。 然后,對於測試輸入,就像計算機將執行代碼一樣,一次只執行一行代碼。 對於每一行,在繪制的版本上進行相應的更改。 在某些時候,代碼將告訴您繪制一些您認為不正確的內容,並告訴您問題出在哪里。
我在您的代碼中注意到的一件事是,您不確定輸入范圍是否與列表大小成正比。 如果列表的長度為5個節點,並且有人調用removeRante(10,12)怎么辦?
對於此特定問題,您有4種情況,應按此順序進行測試和處理。 。 1.開始=頭和結束=尾,此時將頭和尾都設為空,從而清空鏈接列表。
2.開始=頭。 將頭移到終點+1。3.終點=尾。 移動尾巴開始-1。
4.其他一切。 頭=開始+ 1,尾=結束-1。
假設您的tail.next == null
那么您仍然需要設置front = head
就像在以前的情況下更新front
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.