C 拆分循环链表
所以我在本周早些时候的数据结构作业中遇到了一个问题。问题是把一个循环链表分成两半,一个链表中的元素位于偶数位置,另一个链表中的元素位于奇数位置。这就是我尝试过的逻辑C 拆分循环链表,c,data-structures,linked-list,C,Data Structures,Linked List,所以我在本周早些时候的数据结构作业中遇到了一个问题。问题是把一个循环链表分成两半,一个链表中的元素位于偶数位置,另一个链表中的元素位于奇数位置。这就是我尝试过的逻辑 temp= p1 = front; p2= front->next; do {p1->next = temp->next->next; p1= temp->next->next; p2->next = temp->next->next->next; p2= t
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、front、temp和next是结构节点的点
它的定义是这样的
typedef struct
{
type element;
Node* next;
}Node;
然而,我的教授在没有任何解释的情况下将我的答案标记为不正确。有人能告诉我为什么这是错误的吗?假设首先
temp
指向一个奇怪的位置,因此,p1
指向奇数元素,p2
指向偶数元素,但在第一个temp=temp->next
之后,temp指向偶数元素,当您将p1
指定为p1-temp->next->next
时,它是偶数元素,现在p2
将指向奇数位置元素。并且在每个交替迭代中p1
将指向偶数位置和其他偶数位置,p2
假设首先temp
指向奇数位置,因此,p1
指向奇数元素,p2
指向偶数元素,但在第一个temp=temp->next
之后,temp指向偶数元素,当您将p1
指定为p1-temp->next->next
时,它是偶数元素,现在p2
将指向奇数位置元素。并且在每个交替迭代中p1
将指向偶数位置和其他偶数位置,p2
是否测试了2节点或3节点循环链表的逻辑?逻辑中的主要问题是temp=temp->next代码>。P1和P2正在从列表的当前位置向下移动到下一个->下一个
位置,但是temp正在移动到它的下一个
位置。我使用temp遍历原始循环链表,以便我可以引用原始列表的元素。创建两个新列表,“newListOdd”和“NewListEvent”。循环循环“if(pop(oldList))push(newListOdd)else break;if(pop(oldList))push(newlistven)else中断;'然后销毁旧列表。完成了,很简单。你是否意识到p1->next=p1代码>创建一个很短的循环链表?我知道了。我在最初的回答中没有犯同样的错误,我将每个列表的标题保存在一个单独的变量中,以便在其中引用。您是否测试了2节点或3节点循环链表的逻辑?逻辑中的主要问题是temp=temp->next代码>。P1和P2正在从列表的当前位置向下移动到下一个->下一个
位置,但是temp正在移动到它的下一个
位置。我使用temp遍历原始循环链表,以便我可以引用原始列表的元素。创建两个新列表,“newListOdd”和“NewListEvent”。循环循环“if(pop(oldList))push(newListOdd)else break;if(pop(oldList))push(newlistven)else中断;'然后销毁旧列表。完成了,很简单。你是否意识到p1->next=p1代码>创建一个很短的循环链表?我知道了。我在最初的回答中没有犯同样的错误,我将每个列表的标题保存在一个单独的变量中,以便在其中引用。