알고리즘 (1) 링크 의 마지막 K 번 째 노드 를 구하 십시오.
두 개의 지침 을 사용 하여 첫 번 째 지침 은 k - 1 보 앞 당 겨 아래로 내 려 가 고 두 번 째 지침 은 첫 번 째 지침 에 따라 계속 갑 니 다.첫 번 째 포인터 가 끝 을 가리 키 고 두 번 째 포인터 의 요소 의 값 이 바로 우리 가 요구 하 는 값 이라는 것 을 알 고 있 습 니 다.
p1 = link->next;
for(i=1;i<k;i++){
p1 = p1->next;
}
p2 = link->next;
while(p1->next!=NULL){
p1 = p1->next;
p2 = p2->next;
}
return p2->number;
그러나 특수 한 상황 을 감안 하면
1 입력 한 k 가 0 이면 불법 값 이다.해결 방법
2. 링크 가 비어 있 으 면 찾 을 값 을 찾 을 수 없습니다.해결 방법
if(link->next == NULL || k == 0)
return -1;
3. p1 이 링크 의 끝 에 이 르 렀 고 p2 가 시작 되 지 않 았 다 면 링크 의 길이 가 k 개 로 부족 하 다 면 어떻게 해 야 합 니까?해결 방법
p1 = link->next;
for(i=1;i<k;i++){
if(p1->next == NULL)
return -1;
p1 = p1->next;
}
include <stdio.h>
include <stdlib.h>
typedef struct node{
int number;
struct node * next;
}Node;
int getK(Node *link,int k);
int main(){
int n,k,i,temp;
int flag;
while(scanf("%d %d",&n,&k)!=EOF && n>=0 && n<=1000 && k>=0 && k<=1000 ){
Node *link = (Node *)malloc(sizeof(Node));
link->next = NULL;
flag = 0;
Node *tail;
tail = link;
for(i=0;i<n;i++){
scanf("%d",&temp);
Node *n = (Node *)malloc(sizeof(Node));
n->next = tail->next;
tail->next = n;
tail = tail->next;
n->number = temp;
}
int numberK = getK(link,k);
numberK ==-1?printf("NULL
"):printf("%d
",numberK);
}
return 0;
}
int getK(Node *link,int k){
Node *p1,*p2;
int i;
if(link->next == NULL || k == 0)
return -1;
p1 = link->next;
for(i=1;i<k;i++){
if(p1->next == NULL)
return -1;
p1 = p1->next;
}
p2 = link->next;
while(p1->next!=NULL){
p1 = p1->next;
p2 = p2->next;
}
return p2->number;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.