C++ 按升序插入双链接列表时出现问题
我需要做一个函数来求两个分段线性函数(递减或递增)的和,然后根据每个点的x轴坐标以升序将它们插入到第三个列表中。所以我创建了多个函数,除了这一个,所有函数似乎都已签出,但我不知道问题出在哪里。它根本没有输入任何东西 结构坐标具有双x,yC++ 按升序插入双链接列表时出现问题,c++,sorting,doubly-linked-list,C++,Sorting,Doubly Linked List,我需要做一个函数来求两个分段线性函数(递减或递增)的和,然后根据每个点的x轴坐标以升序将它们插入到第三个列表中。所以我创建了多个函数,除了这一个,所有函数似乎都已签出,但我不知道问题出在哪里。它根本没有输入任何东西 结构坐标具有双x,y dListhas:coords pt 节点有:节点*头,*尾 节点*prev,*next dList插入(dList L,coords point){ 节点*温度; temp=新节点; if(temp==NULL){ cout-next=NULL; temp->
dListhas:coords pt
节点有:节点*头,*尾
节点*prev,*next
dList插入(dList L,coords point){
节点*温度;
temp=新节点;
if(temp==NULL){
cout-next=NULL;
temp->prev=NULL;
温度->温度=点;
if(L.head==NULL | | L.tail==NULL){
L.压头=温度;
L.尾=温度;
返回L;
}
如果(左封头->零件x>温度->零件x){
温度->下一步=左压头;
L.压头->上一个=温度;
L.压头=温度;
返回L;
}
如果(左尾翼->第x部分<温度->第x部分){
温度->上一个=左尾;
L.尾部->下一个=温度;
L.尾=温度;
返回L;
}
节点*cur;
cur=L.head->next;
而(当前->点x点x)
cur=cur->next;
临时->下一步=当前->下一步;
温度->上一个=当前;
当前->下一步->上一步=温度;
当前->下一步=温度;
返回L;
}
要插入的节点是中间的问题。你应该先看一个节点,而不是看当前的一个节点。试着在纸上处理它,你会看到这有什么不同:
node * cur;
// also start at head here
cur=L.head;
while(cur->next->pt.x<temp->pt.x)
cur=cur->next;
temp->next=cur->next;
temp->prev=cur;
cur->next->prev=temp;
cur->next=temp;
我希望这对你有帮助。 < P>插入节点在中间的情况是问题。你应该先看一个节点,而不是看当前的一个节点。试着在纸上处理它,你会看到这有什么不同:
node * cur;
// also start at head here
cur=L.head;
while(cur->next->pt.x<temp->pt.x)
cur=cur->next;
temp->next=cur->next;
temp->prev=cur;
cur->next->prev=temp;
cur->next=temp;
希望你能帮助你。< /P>你能添加“<代码>节点< /COD>和<代码> dList< /C>吗?它不加起来。看起来像代码>节点[/COD]有一个<代码> COORDS P< <代码>,而不是你告诉我们的<代码> dList< /Cord>。这是标记C++,并且不声明任何限制或原因。所以使用<代码> STD::列表< /C> >和伪造t所有的自定义列表都被黑客攻击。另外,您询问的确切功能应该是什么?在现有列表中插入
coords
元素?您的插入有问题。对于第一个节点,您设置L.head=temp;
和L.tail=temp;
(这很好,列表只是自我引用,或者在这一点上是循环的)。插入第二个节点时会出现问题。您没有处理L.head==L.tail
的情况,以确定是否设置L.head->next=L.tail=temp
。相反,对于第二个节点,您只需比较head
和tail
的点,这两个节点当时是同一个节点。是否可以添加h定义了OW<代码>节点<代码> >代码> dlist < /C> >。看起来<>代码>节点< /COD>有<代码> CORDS Pt<代码>,而不是你告诉我们的<代码> dlist < /C>。这是标记C++,不声明任何限制或原因。所以使用<代码> STD::列表< /代码>,忘记所有自定义列表黑客。您正在询问的确切功能是什么?将coords
元素插入到现有列表中?您在插入时遇到了问题。对于第一个节点,您设置了L.head=temp;
和L.tail=temp;
(很好,该列表只是自引用,或者是循环的)。插入第二个节点时会出现问题。您没有处理L.head==L.tail
的情况,以确定是否设置L.head->next=L.tail=temp
。而对于第二个节点,您只需比较head
和tail
的点,这两个节点在当时是相同的。没有问题。I aI’我很高兴能帮上忙。没问题。我很高兴能帮上忙。