노드 프로그램에서 체인 테이블 밑에서 k번째 노드를 찾습니다

1906 단어 체인 테이블
최근 사용 개발 과정에서 작은 문제가 발생했습니다. 원인과 방법인 노드 프로그램을 기록하는 김에
생각: 두 개의 지침으로 p1과 p2, p1이 먼저 k-1보를 가리키고 p2가 머리 결점을 가리키며 둘이 함께 간다. p1이 꼬리 노드를 가리킬 때 p2가 가리키는 것이 바로 밑에서 k개의 노드이다.P1이 k-1보를 걷고 정수 k번째 노드를 가리키며 끝 노드에 도착했을 때 p1이 n-k보를 걷는다. 이때 p2가 n-k+1 노드에 이르렀는데 바로 밑에서 k번째 노드이다.코드는 다음과 같습니다.
node *find(node*list,int k)

{

       node *p1=list;

       node *p2=list;

       for (int i=0;i<k-1;i++)

       {

              p1=p1->next;

       }

       while (p1->next!=NULL)

       {

              p1=p1->next;

              p2=p2->next;

       }

       return p2;

}

    
문제점:
1, 체인 시계의 길이가 k보다 작을 때 프로그램은 어떻게 처리합니까
2, 전송된 체인 테이블 바늘 파라미터가 빈 바늘일 때 프로그램은 어떻게 처리합니까
3, k==0 시, 프로그램 어떻게 처리
매일 같은 이치
총명한 사람은 장공을 치는 독수리처럼 끝없는 대지를 우러러본다.어리석은 사람이 공부하는 것은 목적이 없고 마구 날아다니는 머리 없는 나방과 같다.각고의 노력을 기울인 사람은 굽은 강처럼 굽이굽이가 있지만 결국 바다로 흘러들어간다.게으른 사람은 물속의 나무처럼 저항력이 클수록 빨리 뒷걸음질친다.
상황1: 판단이 필요합니다. k가 체인 테이블 길이보다 큰 경우return NULL
상태 2: 포인터가 비어 있을 때 returnNULL
상황3: k=0일 때 꼴찌 0번째 노드로 돌아가고 꼴찌만 꼴찌 0개가 없으면 NULL로 돌아간다.
수정된 절차는 다음과 같습니다.
node *find(node *list,intk)

{

 

       int length=0;

       node *p=list;

       while (p!=NULL)

       {

              length++;

              p=p->next;

       }

       if (list==NULL||k==0||k>length)

       {

              return NULL;

       }

 

       node *p1=list;

       node *p2=list;

       for (int i=0;i<k-1;i++)

       {

              p1=p1->next;

       }

       while (p1->next!=NULL)

       {

              p1=p1->next;

              p2=p2->next;

       }

       return p2;

}

    
    
문장이 끝나면 여러분께 프로그래머의 우스갯소리 어록을 공유합니다. 퀴즈 Q: 당신은 내성적인 프로그래머와 외향적인 프로그래머를 어떻게 구분합니까?A:외향적인 프로그래머가 당신의 신발을 보고 당신과 이야기할 때.Q:왜 프로그래머는 할로윈과 크리스마스를 구분하지 못합니까?A:이것은 Oct 31 = Dec 25 때문입니다!(8진법의 31== 10진법의 25)

좋은 웹페이지 즐겨찾기