【发布时间】:2018-10-15 16:54:35
【问题描述】:
我有一个使用双向链表的程序并对其进行了简化。
NULL [HEADPTR] [VALUEA, 1] [ValueB, 2] [ADD, VALUEA, VALUEB] ...列表的其余部分
NULL [VALUEC, 3] ...列表的其余部分。
我只是对如何删除 VALUEA 和 B 感到困惑。我可以成功删除其中的一个值,但是当我尝试删除它们时,我遇到了分段错误。我知道我删除第二个节点的逻辑是错误的。我正在使用三指针系统来查找和简化值。
while(rightP->next != NULL){
if(rightP->critical == 'Y'){
//printf("Found a critial\n");
//Critical helps me find what I need to merge
rightP->field2 = leftP->field2 + middleP->field2;
//printf("MERGING ADD %d\n", rightP->field2);
temp1 = leftP;
if(leftP->prev != NULL)
leftP = leftP->prev;
else
leftP->prev = NULL;
leftP->next = temp1->next;
leftP->next->prev = leftP;
free(temp1);
//bad segment
//Yields Seg fault
temp2 = middleP;
middleP->prev = leftP;
middleP->next = temp2->next;
middleP->next->prev = middleP;
middleP = rightP;
rightP = rightP->next;
free(temp2);
}
leftP = leftP->next;
middleP = middleP->next;
rightP = rightP->next;
else{
leftP = leftP->next;
middleP = middleP->next;
rightP = rightP->next;
}
}
【问题讨论】:
-
您能否发布一个语法正确的代码?
-
你不会同时删除 A 和 B。你删除 A。然后你删除 B。删除 B 与删除 A 没有什么不同。
标签: c doubly-linked-list