데이터 구조 - 싱글 체인 시트 진급 의 속도 포인터 원리 (빠 른 검색 법)
이 문제 의 해결 방법 은 일반적인 방법 과 고급 방법 으로 나 뉜 다.
1. 일반적인 방법 은 우리 모두 가 한꺼번에 생각 할 수 있 는 것 이다. 먼저 전체 길이 의 L 을 얻 은 다음 에 다시 L/2 로 순환 하면 된다.시간 복잡 도:
O(L+L/2)=O(3/2L)
코드 단순 구현:
typedef struct {
int data;
LNode *next;
}LNode,*LinkList;
/*
function:
L, L/2
*/
LNode *getElement(LinkList L) {
if (L == NULL) {
return NULL;
}
int i = 1;
LNode *p = L->next;
while (p!=NULL)
{
p = p->next;
i++;
}
int j = 1;
int mid = i / 2;
LNode *midNode = L->next;
while (jnext;
}
return midNode;
}
2. 고급 방법: 빠 르 고 느 린 바늘 법, 2 개의 바늘 * faster 를 설정 합 니 다. * mid 는 모두 단일 체인 표 의 머리 노드 를 가리 키 는데 그 중에서 faster 이동 속 도 는 mid 의 2 배 입 니 다. faster 가 끝까지 이동 하면 mid 는 중간 위치 에 있 습 니 다. 다음은 간단 한 실현 입 니 다.
/*
function:
*/
LNode *fasterGetElement(LinkList L) {
LNode *mid, *faster;
mid = L->next;
faster = L->next;
while (faster!=NULL)
{
mid = mid->next;
//faster = faster->next->next
faster = faster->next;
faster = faster->next;
}
return mid;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.