저는 독일에서 컴퓨터 과학을 전공하고 있습니다. 교수님은 다음과 같은 질문을 생각해 보았습니다 :O (1) 복잡도를 가진 단일 연결 목록에서 하나의 요소를 삭제하기위한 알고리즘
'하나의 링크 된 목록 (마지막 노드가 아닌 노드)에 대한 참조가 주어졌습니다. 무결성을 유지하면서 복잡성이 O (1) 인 목록에서이 요소를 삭제하는 알고리즘을 제공하십시오.
나는 이것에 대해 생각했지만 꽤 그런 알고리즘은 없다고 확신한다. 링크 된 단일 목록이기 때문에 노드의 next-Pointer를 삭제해야하기 때문에 삭제해야하는 노드에 도달 할 때까지 목록의 모든 노드를 반복해야합니다. O (n) 복잡도로 이어질 것입니다.
나는 무엇이 있습니까?
아, 알았습니다. 고마워요 :) –
존이 설명했듯이 노드 구조가 작동하도록하려면 조심해야합니다. 아무도 노드 자체에 대한 참조를 보유해야하며 데이터에 대해서만 보유해야합니다. 그렇지 않으면 소비자는 예전의 toDelete.next 객체에 대한 잘못된 참조 (예 : C++의 경우 노드 구조를 삭제 한 경우) 또는 부적절한 노드 객체를 남겨 둡니다. –
이것은 실제로 단일 연결 목록에서 요소를 제거하는 '알고리즘'이 아닙니까? 이것은 목록에서 요소를 제거하는 표준 방법입니다. – Dinuk