면접 문제 - 데이터 구조의 단일 체인 표 상술 (기본 편 3)
코드 에 주석 이 있어 쉽게 이해 할 수 있 습 니 다.
//
node *InsertSort(void)
{
int data = 0;
struct node *head = NULL;
struct node *New, *Cur, *Pre;
while(1)
{
printf("please input the data: ");
scanf("%d", &data);
if(0 == data) // 0
{
break;
}
New = (struct node*)malloc(sizeof(struct node));
New->data = data; // node
New->next = NULL;
if(NULL == head) //
{
head = New;
continue;
}
if(New->data <= head->data) //head
{
New->next = head;
head = New;
continue;
}
Cur = head;
while(New->data > Cur->data && NULL != Cur->next)
{ //
Pre = Cur;
Cur = Cur->next;
}
if(Cur->data >= New->data) //
{ // New pre cur
Pre->next = New;
New->next = Cur;
}
else //
{ // new cur
Cur->next = New;
}
}
return head;
}
단일 체인 시트 에 고리 형 링크 문제 가 존재 하 는 지 판단 하 는 데 비교적 간단 한 해법 이 있 습 니 다. 두 개의 지침 이 각각 p1 과 p2 라 고 가정 하고 한 번 순환 할 때마다 p1 은 한 걸음 앞으로 가 고 p2 는 두 걸음 앞으로 가 며 p2 가 NULL 지침 에 부 딪 히 거나 두 바늘 이 같 을 때 순환 이 끝 납 니 다.만약 두 바늘 이 같다 면 고리 가 존재 한 다 는 것 을 설명 한다.
프로그램 코드 는 다음 과 같 습 니 다:
//
// ,start
bool IsLoop(node *head, node **start)
{
node *p1 = head;
node *p2 = head;
if(NULL == head || NULL == head->next)
{ //head NULL false
return false;
}
do
{
p1 = p1->next; //p1
p2 = p2->next->next; //p2
}while(p2 && p2->next && p1 != p2);
if(p1 == p2)
{
*start = p1; //p1
return true;
}
else
{
return false;
}
}
다음은 인쇄 함수 와 주 함수 테스트 입 니 다.
void print(node *head)
{
int pos = 0;
node *p = head;
while(NULL != p)
{
printf("the %dth node %d
", ++pos, p->data);
p = p->next;
}
}
int main()
{
bool bLoop = false;
node *head = InsertSort(); //
printf("Link Sort...
");
print(head);
printf("IsLoop test.........
");
node *start = head->next->next->next; //
start->next = head->next; //
node *loopStart = NULL;
bLoop = IsLoop(head, &loopStart);
printf("bLoop = %d
", bLoop);
printf("bLoop == loopStart ? %d
", (loopStart == start));
return 0;
}
다음은 프로그램 실행 결과 입 니 다. 입력 은 1, 6, 4, 5, 3, 2 입 니 다.
please input the data: 1
please input the data: 6
please input the data: 4
please input the data: 5
please input the data: 3
please input the data: 2
please input the data: 0
Link Sort...
the 1th node 1
the 2th node 2
the 3th node 3
the 4th node 4
the 5th node 5
the 6th node 6
IsLoop test.........
bLoop = 1
bLoop == loopStart ? 1
Press any key to continue
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.