void AlternatingSplit(struct Node* source, struct Node** aRef,
struct Node** bRef)
{
/* split the nodes of source to these 'a' and 'b' lists */
struct Node* a ;
struct Node* b;
struct Node* current = source;
if(current){
a=current;
b=current->next;
current=b->next;
a->next=NULL;
b->next=NULL;
}
while(current) {
a->next=current;
b->next=current->next;
if(b)
current=b->next;
b=b->next;
a=a->next;
}
*aRef = a;
*bRef = b;
}
我在这里遇到了问题我不知道为什么请帮忙。
这个问题是交替拆分linkedlist节点。我使用两个指针a和b,并交替添加到它,但它给出了错误。请帮助我
最佳答案
代码中几乎没有错误-
试图访问No.> NEXT,而不检查节点是否存在。
不根据链表长度(即if长度(链表)然后是一个错误,你试图创建新的链表,最后aRef和bRef被分配到各自链表中的最后一个节点。
尝试处理这些问题,并参考下面的代码。
void AlternatingSplit(struct Node* source, struct Node** aRef,
struct Node** bRef)
{
struct Node* a,b;
struct Node* current = source;
if(current){
a=current;
b=current->next;
// moving 'current' one step at a time will secure the code from crashing for corner cases
current = current->next;
if(b)
current=b->next;
a->next=NULL;
b->next=NULL;
//link aRef bRef right here
*aRef = a;
*bRef = b;
}
else {
*aRef = source; // Null
*bRef = source; // Null
return;
}
while(current)
{
a->next=current;
a=a->next;
b->next=current->next;
b=b->next;
current=current->next;
if(b){
current = b->next;
}
}
b->next = NULL;
a->next = NULL;
}
希望这会有帮助。
继续问,继续成长:)
关于c - 链表获取段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51452473/