【发布时间】:2017-04-07 13:21:54
【问题描述】:
我正在尝试交换链表中节点的位置 稍后使用排序功能进行排序。我在其中任何一个功能中都遇到了逻辑错误。当我运行程序时,它会进入无限循环。
更新代码
int adjuctNodes(struct student_record_node** n1, struct student_record_node** n2)
{
struct student_record_node* prev_;
struct student_record_node* next_;
return((*n1)->next_==(*n2) && (*n2)->prev_ == (*n1))||
( (*n1)->prev_ ==(*n2) && (*n2)->next_ == (*n1) );
}
void updateOuterPointer(struct student_record_node** n)
{
struct student_record_node* next_;
struct student_record_node* prev_;
if((*n)->next_!=NULL)
(*n)->prev_->next_=(*n);
if((*n)->next_ !=NULL)
(*n)->next_->prev_=(*n);
}
/*Swaping */
void swap(struct student_record_node** node1, struct student_record_node** node2)
{
struct student_recod_node* prev_;
struct student_recod_node* next_;
struct student_record_node* ptr=(*node1)->next_;
if(adjucntNodes((node1),(node2)))
{
(node1)->prev_=pnode2;
(node2)->prev_=pnode0;
(node1)->next_=pnode3;
(node2)->next_=pnode1;
}else{
(node1)->prev_=pnode1;
(node2)->prev_=pnode0;
(node1)->next_=pnode3;
(node2)->next_=pnode2;
}
updateOuterPointer((node1));
updateOuterPointer((node2));
}
/*Sorting linked list*/
void sort(struct student_record_node**recordsHead,int(*compare_fcn)(struct
student_record_node*,struct student_record_node*))
{
int swapped;
struct student_record_node *ptr1=*recordsHead;
struct student_record_node *lptr = NULL;
if (ptr1 == NULL)
return;
do
{
swapped = 0;
ptr1 = *recordsHead;
while (ptr1->next_ != lptr)
{
if (compare_fcn(ptr1,ptr1->next_))
{
printf("swapping\n");
swap(&ptr1,&ptr1->next_);
if(ptr1==*recordsHead)
{
(*recordsHead)=ptr1->next_;
}
swapped=1;
}
else ptr1 = ptr1->next_;
}
lptr = ptr1;
;
}
while (swapped);
}
【问题讨论】:
-
不要添加无关标签!
-
您是否尝试过使用调试器?
-
你能修正一下格式吗?甚至在您发布之前还有一个预览。
-
是的,我试图调试它,但我找不到错误。
-
你的
swap函数需要处理node1和node2相邻的特殊情况。
标签: c sorting swap doubly-linked-list