【问题标题】:Merge two single link lists in c在c中合并两个单链表
【发布时间】:2014-12-05 00:54:57
【问题描述】:

我正在编写一个函数,它采用两个列表结构,每个列表结构包含两个指针,一个指向列表中的第一个节点,另一个指向列表中的最后一个节点。 我在 if 行的 if 行遇到分段错误。 这是我的功能:

extern void lst_merge_sorted(LIST *a, LIST *b);
void lst_merge_sorted(LIST *a, LIST *b){
NODE *aCurr,*bCurr,*aTemp,*bTemp;
aCurr = a->front;
bCurr = b->front;
aTemp = a->front;
bTemp = b->front;
int aLength = 2, bLength = 2;
while(aCurr->next != NULL){
    aLength++;
    aCurr = aCurr->next;
    }
while(bCurr->next != NULL){
    bLength++;
    bCurr = bCurr->next;
    }
int i,j;
for (i = 0; i < aLength; i++){
    for(j = 0; j < bLength; j++){
        if (bTemp->val < aTemp->val){
            bTemp->next = aTemp->next;
            aTemp->next = bTemp;
            }
        bTemp = bTemp->next;
        }
    aTemp = aTemp->next;
    }
}

还有我的列表结构/节点结构:

typedef struct node {
    ElemType val;
    struct node *next;
} NODE;


struct list_struct {
    NODE *front;
    NODE *back;
};

有人知道我为什么会出现段错误吗? 编辑 ElemType 声明是

Typedef int ElemType

【问题讨论】:

  • for (i = 0; i &lt; aLength; i++){ for(j = 0; j &lt; bLength; j++){ IMO 首先计算列表是没有意义的。
  • 你说得对,这没有意义。对段错误有任何想法吗? @wildplasser
  • 请看右边的老话题--&gt;&gt;。像这样的事情可以在 10 行代码中非常优雅地处理。不用数。

标签: c struct linked-list segmentation-fault


【解决方案1】:

看看那个嵌套循环。您可能真的不想遍历列表 b aLength * bLength 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多