>  기사  >  백엔드 개발  >  한 행에 있는 역방향 연결 리스트

한 행에 있는 역방향 연결 리스트

WBOY
WBOY앞으로
2024-02-09 09:18:19981검색

한 행에 있는 역방향 연결 리스트

php 편집기 Yuzai는 일반적인 데이터 구조 알고리즘인 "행 내 역방향 연결 목록"을 소개합니다. 이 알고리즘에서는 연결된 목록의 노드 순서를 반대로 바꿔야 합니다. 간결하고 효율적인 코드 구현을 통해 연결 목록의 순서를 완전히 뒤집어 한 줄로 이 작업을 완료할 수 있습니다. 이 알고리즘은 실제 프로그래밍에 매우 유용하며 데이터 처리와 알고리즘 설계 모두에서 중요한 역할을 할 수 있습니다. 이 놀라운 알고리즘에 대해 함께 알아볼까요?

질문 내용

leetcode에서 한 줄을 사용하여 역방향 연결 목록에 대한 솔루션을 방금 찾았습니다. 작동하지만 어떻게 이해하지 못합니다.

바로 그거예요:

으아악

예를 들어 목록을 [1->2->3->4->5->nil]이라고 가정해 보겠습니다.

다음과 같이 작동하는 것으로 알고 있습니다.

  1. 먼저 실행하세요 head.next = prev (head.next = nil, 所以现在 head = [1->nil])

  2. 그럼 prev = head (在这一步 prev = [1->nil] 就像上一步中的 head동일)

  3. head = head.next 这就是魔法。对于第二步go中的prev,使用head = [1->nil],但是在这一步之后head = [2->3->4->5->nil]

그러면 언제 head != nil 时,它会进行迭代,并在第二步 prev = [2->1->nil]head = [3->4->5->nil] 등등.

이 줄은 다음과 같이 표현될 수 있습니다:

으아악

제 말이 맞나요? 왜 이런 일이 발생합니까?

Solution

표현식 왼쪽의 변수는 그 당시 표현식 오른쪽의 값에 할당됩니다. 이것은 영리한 언어 사용이다.

이해를 돕기 위해 예를 들어보겠습니다.

설정

링크 목록은 다음과 같습니다. 1 -> 2 -> 3 -> 없음

기능이 실행되기 전,

  • 헤드는 *노드 1
  • 입니다.
  • prev는 0입니다(초기화되지 않음)
  • head.next는 *노드 2
  • 입니다.

차근차근

으아악

자세히 살펴보겠습니다.

  • prev(nil) = 헤드(*노드 1)
  • head(*노드 1) = head.next(*노드 2)
  • head.next (*노드 2) = 이전 (nil)

다음 반복,

  • prev (*노드 1) = 헤드 (*노드 2)
  • head(*노드 2) = head.next(*노드 3)
  • head.next (*노드 3) = prev (*노드 1)

요약

기본적으로는 이전 노드로 역head.next하고 prev를 이동하여 다음 노드로 향합니다.

이를 go의 교과서 알고리즘과 비교하여 명확하게 설명하세요.

으아악

위 내용은 한 행에 있는 역방향 연결 리스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제