2017-10-15 2 views
0

이번 주 초에 데이터 구조 할당 질문이 있습니다. 문제는 순환 링크 된 목록을 하나의 목록에있는 짝수 위치의 요소와 다른 목록의 홀수 위치에있는 요소로 분리하여 두 개의 절반으로 분리하는 것입니다. 이것은 내가 시도한 논리입니다.순환 링크 된 목록 분할

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

+0

2 노드 또는 3 노드 순환 링크 목록에 대한 논리를 테스트 했습니까? 당신의 논리에서 가장 큰 문제는'temp = temp-> next;'입니다. P1과 P2는 현재 위치에서 '다음 -> 다음 위치'로 목록을 이동하지만 임시는 '다음'으로 이동합니다. –

+0

원래 순환 링크 된 목록을 가로 지르도록 temp를 사용하여 원래 목록의 요소를 참조 할 수 있습니다. –

+0

두 개의 새 목록 'newListOdd'및 'newListEven'을 만듭니다. 루프 라운드 'if (pop (oldList)) push (newListOdd) else break; if (pop (oldList)) push (newListEven) else break; 다음 오래된 목록을 파괴하십시오. 간단 해. –

답변

2

가정하므로 홀수 행 p1 점 심지어 소자하지만 제 temp=temp->next 임시 점 후의 짝수 요소와 p2 포인트는 짝수 요소 지금 p2p1-temp->next->nextp1 할당하면 홀수 위치 요소를 가리키고 각 반복 반복에서 p1은 짝수 번째 위치를 가리키고 다른 짝수 번째 위치는 p2이됩니다.