이번 주 초에 데이터 구조 할당 질문이 있습니다. 문제는 순환 링크 된 목록을 하나의 목록에있는 짝수 위치의 요소와 다른 목록의 홀수 위치에있는 요소로 분리하여 두 개의 절반으로 분리하는 것입니다. 이것은 내가 시도한 논리입니다.순환 링크 된 목록 분할
temp= p1 = front;
p2= front->next;
do
{p1->next = temp->next->next;
p1= temp->next->next;
p2->next = temp->next->next->next;
p2= temp->next->next->next;
temp=temp->next;
} while (temp!= front);
p1->next=p1;
p2->next=p2;
나의 논리는 첫 번째 요소와 다음 요소를 가리키는 두 개의 포인터를 만드는 것이 었습니다. 그런 다음 목록을 한 쪽에서 다른 쪽으로 가로 지릅니다. 내가 그렇게하는 동안, 나는 대체 위치에있는 요소를 가리 키도록 각각의 다음 포인터를 설정한다. 다음 P1, P2, 전면, 온도 및 내 교수는 어떤 설명없이 잘못된 같은 내 대답을 표시하지만이
typedef struct
{
type element;
Node* next;
}Node;
로 정의 구조체 노드 의 기준이라고 참고. 누군가 이것이 왜 잘못되었는지 말해 줄 수 있습니까? 하는 홀수 위치보다 먼저 temp
점
2 노드 또는 3 노드 순환 링크 목록에 대한 논리를 테스트 했습니까? 당신의 논리에서 가장 큰 문제는'temp = temp-> next;'입니다. P1과 P2는 현재 위치에서 '다음 -> 다음 위치'로 목록을 이동하지만 임시는 '다음'으로 이동합니다. –
원래 순환 링크 된 목록을 가로 지르도록 temp를 사용하여 원래 목록의 요소를 참조 할 수 있습니다. –
두 개의 새 목록 'newListOdd'및 'newListEven'을 만듭니다. 루프 라운드 'if (pop (oldList)) push (newListOdd) else break; if (pop (oldList)) push (newListEven) else break; 다음 오래된 목록을 파괴하십시오. 간단 해. –