我需要返回鏈接列表的頭部,並刪除所有重複的元素。我理解問題的邏輯,但是我在使用遞歸時感到困惑。刪除鏈接列表中的重複值(Java中的遞歸)
/*
Node is defined as
class Node {
int data;
Node next;
}
*/
Node RemoveDuplicates(Node head) {
if ((head == null) || (head.next == null))
return head;
else {
RemoveDuplicates(head.next);
if (head.data==head.next.data) head.next = head.next.next;
}
return head;
}
如果我在if條件之前調用RemoveDuplicates(head.next)函數,它工作正常。然而,如果我交換語句的順序(休息一切是完全一樣的),如:
if (head.data==head.next.data) head.next = head.next.next;
RemoveDuplicates(head.next);
的代碼無法正確地解決用於測試用例如「1-> 1-> 1-> 1」 。我在後一種情況下得到的輸出是'1-> 1'。
我真的很想就如何更好地理解遞歸提出一些建議。
一些細節: - 你不需要在第一個括號中圍繞這兩個術語,因爲('=='在'||'之前)[https://docs.oracle.com/javase/tutorial/的java/nutsandbolts/operators.html]。 - 按照慣例,Java中的方法沒有大寫,即在這種情況下它應該被命名爲'removeDuplicates'。 –