LeetCode - 속도 포인터

포인터 속도 : 이중 포인터. 목록에서 제공하는 두 포인터, 목록 동기화를 통과하지 않습니다. 우리는 두 개의 포인터 사이의 필요한 거리를 제조 할 수있다.

 

LeetCode 141 원형 연결리스트     쉬운

샘플의 변화에 ​​의해 순수 테스트 표면 제목만큼 목록이 라인으로 이루어지는 루프가 있는지 여부에 의해 판단한다.

A는 생각 : 해시

대부분의 가능성이 아이디어 목록이 방문 할 때마다 해시,해야한다고 생각하고, 해시 테이블에 기록 넣어, 반복 방문의 링리스트의 노드, 약간의 코드가있을 때.

생각이 : 포인터의 속도

빠르고 느린 두 개의 포인터, 각각 2 단계를 제공. 목록 빠른 배 빠른 속도가 느린 같은 의미 활주로에 비해합니다. 반지 몇 시간 후 천천히 조만간 전체 회전보다 더 빨리,하지 NULL로 신속하게 빠르게 액세스 할 수 있지만, 빠른 속도, 즉, 목록에 존재하면 두 개의 포인터 것이다 다시 만나 (빠른 == 느린).

1  솔루션 {
 2  공개 :
 3      부울 hasCycle (ListNode * 헤드) {
 도 4          의 경우 (NULL == 헤드 || == NULL 헤드 -> 다음)
 5              리턴  거짓 ;
6          
7          ListNode * = 느린 헤드;
8          ListNode * = 빠른 헤드;
9          
(10)          동안 (NULL = 빠른 && = NULL이 빠른>! 다음)
 11          {
 12              빠른이 빠른 =>하는 next-> 다음;
13              천천히 느리게 => 다음;
14              의 경우 (빠른 ==) 천천히
 (15)                  수익을  사실 ;
16          }
 17          반환  거짓 ;
18      }
 19 };
코드보기

 

중간 노드 목록은 876 LeetCode  쉽게

포인터가 빠르고 느린 포인터 포인트를 정확히 중간 노드 목록의 끝에 도달 할 때 포인터의 빠른 속도가 두 배 느린 포인터이다.

1  솔루션 {
 2  공개 :
 3      ListNode * middleNode (ListNode * 헤드) {
 4          ListNode * = 느린 헤드;
5          ListNode * = 빠른 헤드;
(6)          의 경우 (NULL == 헤드 || == NULL 헤드 -> 다음)
 7              복귀 헤드;
8          동안 ( 1 )
 (9)          {
 10              빠른이 빠른 => 다음;
11              의 경우 (NULL이 빠른 ==> 다음)
 12                  리턴 슬로우> 다음;
13              천천히 느리게 =>다음 것;
14              빠른이 빠른 => 다음;
15              만약 (이 빠른> 다음 == NULL)
 (16)                  반환 느린;
17          }
 18      }
 19 };
코드보기

 

상호 LeetCode (19)는 N 노드 목록 삭제     매체

N은 포인터가 빠르게 포인터 전의 N-th 요소의 빠르고 느린 점 바로 포인터의 끝에 도달 할 때 빠른 포인터를 제하고, 동일한 속도로 목록을 통과되도록 단계.

1  솔루션 {
 2  공개 :
 3      ListNode * removeNthFromEnd (ListNode * 헤드 INT의 N) {
 4          ListNode * = 느린 헤드;
5          ListNode * = 빠른 헤드;
6           ( INT가 나는 = 0 ;! I = N; ++ I)
 7              빠른이 빠른 => 다음;
8          경우 (NULL == 빠른)
 9              반환 머리 -> 다음;
10          동안 (NULL! =이 빠른> 다음)
 11          {
 12             빠른 =이 빠른> 다음;
13              천천히 느리게 => 다음;
14          }
 15          슬로우> 다음 = 슬로우>하는 next-> 다음;
16          리턴 헤드;
17      }
 18 };
코드보기

추천

출처www.cnblogs.com/CofJus/p/11992789.html