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/

10-14 07:20