>  기사  >  백엔드 개발  >  Python 단일 연결 목록에서 노드를 찾고 삭제하는 방법은 무엇입니까?

Python 단일 연결 목록에서 노드를 찾고 삭제하는 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2019-03-18 14:08:505694검색

이전 글에서【파이썬 단일 연결 리스트에 노드를 삽입하고 출력하는 방법은 무엇인가요? ]에서는 단일 연결 리스트가 무엇인지, 노드를 추가하고 모든 노드를 출력하는 방법을 소개합니다. 다음 글에서는 노드를 찾고 삭제하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다.

Python 단일 연결 목록에서 노드를 찾고 삭제하는 방법은 무엇입니까?

단일 연결 목록에서 노드를 찾는 방법은 무엇입니까?

대부분의 데이터 구조와 마찬가지로 요소가 존재하는지 확인하는 유일한 방법은 전체 연결 목록을 순회하는 것입니다. 연결된 목록이 정렬되어 있으면 이진 검색을 사용할 수 있습니다. 하지만 여기서는 정렬되지 않은 연결 목록을 고려해 보겠습니다.

작동 방식: 사용자는 찾아야 하는 노드 요소를 제공합니다. 요소를 찾으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 카운터를 사용하여 요소의 인덱스를 반환할 수도 있습니다(존재하는 경우). ).

Algorithm

1. 포인터 curr를 헤드로 설정합니다

2. curr.data를 입력 값과 비교합니다.

●같으면 True를 반환

●● 그렇지 않으면 다음 포인터로 이동

3. 요소를 찾거나 연결 목록의 끝에 도달할 때까지 1-2단계를 반복합니다.

구현 코드:

def findNode(self,value):
       curr = self.head
       while curr:
           if curr.getData() == value:
               return True
           curr = curr.getNextNode()
       return False

단일 연결 목록에서 노드를 삭제하는 방법은 무엇입니까?

위의 예에서 노드를 찾는 방법을 알고 있으며 이를 사용하여 노드를 삭제할 수 있습니다. 사용자로부터 값을 얻고, 연결 목록에서 요소를 찾아 요소가 있으면 제거할 수 있습니다.

참고: 요소가 성공적으로 삭제되었는지 여부를 사용자에게 알리는 것이 매우 중요합니다. 따라서 삭제가 성공하면 True를 반환하고, 그렇지 않으면 False를 반환합니다. 크기 속성을 1씩 줄여야 합니다.

현재 노드를 삭제할 노드를 호출해 보겠습니다. 아이디어는 이전 노드의 다음 노드를 현재 노드의 다음 노드에 연결하는 것입니다. 예를 들어, 주어진 연결 리스트에서 4를 제거하고 싶다고 가정해 보겠습니다.

原链表: H-->3-->4-->5 
删除4后:H-->3-->5

다음 노드 3이 다음 노드 4, 즉 5를 가리켜야 합니다.

3

删除3后:H-->5

도 삭제한다고 가정합니다. 참고: 이전 노드와 현재 노드의 다음 노드 사이에 연결을 설정하려면 이전 노드를 추적해야 합니다.

Algorithm

1. 두 가지 포인터가 있습니다.

● CURR - 처음에는 헤더에 할당됨

● prev - 처음에는 None을 가리킴

2. 입력 값이 curr의 데이터와 일치하는지 확인합니다. of prev:

● 그렇다면 prev의 다음 노드를 curr의 다음 노드로 설정하세요

● 그렇지 않다면 헤드를 curr의 다음 노드로 지정하세요. (첫 번째 노드를 삭제하려고 할 때 이런 일이 발생합니다.)

●● 크기 속성을 1만큼 감소

●● Return True

3. 입력한 값이 curr의 데이터와 일치하지 않으면 다음 방법으로 다음 노드로 이동합니다.

● 이전 곡선을 가리킵니다.

● CURR을 다음 노드 CURR

4. 연결 목록의 끝까지 반복합니다.

5. 연결 목록의 끝에 도달하면 False가 반환됩니다. 연결된 목록이 입력 값과 일치합니다

구현 코드:

def removeNode(self,value):
        prev = None
        curr = self.head
        while curr:
            if curr.getData() == value:
                if prev:
                    prev.setNextNode(curr.getNextNode())
                else:
                    self.head = curr.getNextNode()
                return True
                    
            prev = curr
            curr = curr.getNextNode()
            
        return False

추천 관련 비디오 튜토리얼: "python3 tutorial"

위는 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !

위 내용은 Python 단일 연결 목록에서 노드를 찾고 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.