2017-10-15 55 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; 

但是我的教授標誌着我的答案不正確,沒有任何解釋。有人能告訴我爲什麼這是錯的嗎?

+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

在第一temp點假設爲奇數現在的位置,所以p1指向奇數和p2指向甚至元件但經過第一temp=temp->next臨時指向一個偶數元件,並且當分配p1作爲p1-temp->next->next其是偶數元素和現在p2將指向一個奇怪的位置元素。並且在每個替代迭代中,p1將指向偶數位置,在其他偶數位置,p2也是如此。