에게 "파이썬"방법을 반환하지 않습니다 예외를 발생시킵니다. 이 코드는 매우 간단합니다 :
def removeRec(node, value):
if isinstance(node, EmptyNode):
raise ValueError("Cannot remove value from an empty list")
elif node.data == value:
return node.next
else:
node.next = removeRec(node.next, value)
return node
이 호출 코드에서 예외를 처리하는 호출자에두고, 기존 remove
기능이 작동합니다.당신이 성공 또는 실패를 나타내는 부울 값을 반환하는 remove
기능을 원하는 경우, 당신이 거기를 제외하고 잡을 수있다 : 어떤 이유로 예외를 사용에 대해 당신이 경우 죽은 세트를
def remove(lst, value):
try:
lst.head = removeRec(lst.head, value)
return True # only reached if no exception was raised by the recursion
except ValueError:
return False
를 (예 :에있는 것으로 당신이 아직 가르쳐주지 않은 클래스)에서 재귀 호출의 반환 값에서 제거 실패를 인코딩 할 수 있지만 목록을 손상시키지 않으려면 추가 검사를해야합니다.
def removeRec(node, value):
if isinstance(node, EmptyNode):
print("Cannot remove value from an empty list")
return None # your code did this implicitly, I'm being explicit
elif node.data == value:
return node.next
else:
rec_result = removeRec(node.next, value)
if rec_result is None:
return rec_result
else:
node.next = rec_result
return node
그런 다음 비 재귀 함수에서 재귀 적 경우와 동일한 검사를 수행하고 결과 값을 bool로 바꿀 수 있습니다 EAN은 :
def remove(lst, value):
rec_result = removeRec(lst.head, value)
if rec_result is None:
return False
else:
lst.head = rec_result
return True
아주 좋은 대답! –