2017-10-15 31 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也是如此。