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;
但是我的教授标志着我的答案不正确,没有任何解释。有人能告诉我为什么这是错的吗?
您是否测试了2个节点或3个节点循环链表的逻辑?你的逻辑中的主要问题是'temp = temp-> next;'。 P1和P2从列表当前位置向下移动到下一个位置,但临时移动到下一个位置。 –
我正在使用temp来遍历原始的循环链表,以便我可以引用原始列表的元素。 –
创建两个新列表'newListOdd'和'newListEven'。循环'if(pop(oldList))push(newListOdd)else break; if(pop(oldList))push(newListEven)else break;'然后摧毁旧名单。完成,容易。 –