关于C语言的Segment fault的问题

你用的是冒泡排序法吧?
但是冒泡排序法对比的两项是
List \u0026gt; List而不是列表的 , , , ... 项对比。
(Fis1-\u0026gt;data)\u0026gt;(Sec1-\u0026gt;data)你的算法的复杂度是关于C语言的Segment fault的问题
而不是关于C语言的Segment fault的问题
。所以你的算法里面的
Fis1=Fis1-\u0026gt;next;Sec1=Sec1-\u0026gt;next;直接在突破 【关于C语言的Segment fault的问题】 关于C语言的Segment fault的问题
个元素之后指向了未知的内存区域,因此运行的时候报错 Segment Fault。

■网友
谢邀,不好意思,之前没看到,具体代码没有细看,估计是空指针的问题gg,当年这种问题出现很多,废了老大力气一步步断点找到的,建议指针初始化的时候一定要置为空~我把这个题目自己写了下,希望有用~#include\u0026lt;stdio.h\u0026gt;#include\u0026lt;stdlib.h\u0026gt;struct ListNode { int data; struct ListNode *next;};void print_list(struct ListNode *list){\tstruct ListNode *head = list;\twhile(head!=NULL){\t\tprintf("%d",head-\u0026gt;data);\t\thead = head-\u0026gt;next;\t}\tprintf("\");}struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2){\tstruct ListNode *result=NULL;\tstruct ListNode *Fis_1=NULL; // 跟随list1移动\tstruct ListNode *Fis_2=NULL; // 跟随list2移动\tstruct ListNode *next=NULL;\t // 记录下一个位置\tstruct ListNode *end=NULL; // 记录退出循环时指针位置\t\tint i,j,k,l;\tFis_1 = list1;\tFis_2 = list2;\tint count =0;\twhile(Fis_1!=NULL || Fis_2!=NULL){\t\tif(Fis_1 == NULL){\t\t\tnext-\u0026gt;next = Fis_2;\t\t\tbreak;\t\t}\t\telse if( Fis_2==NULL){\t\t\t\tnext-\u0026gt;next = Fis_1;\t\t\t\tbreak;\t\t}\t\tif(Fis_1-\u0026gt;data \u0026lt;= Fis_2-\u0026gt;data){\t\t\tif(count==0){\t\t\t\tresult = Fis_1;\t\t\t\tnext = Fis_1;\t\t\t}\t\t\telse{\t\t\t\tnext-\u0026gt;next = Fis_1;\t\t\t\tnext = Fis_1;\t\t\t}\t\t\tFis_1 = Fis_1-\u0026gt;next;\t\t}\t\telse{\t\t\tif(count==0){\t\t\t\tresult = Fis_2;\t\t\t\tnext = Fis_2;\t\t\t}\t\t\telse{\t\t\t\tnext-\u0026gt;next = Fis_2;\t\t\t\tnext = Fis_2;\t\t\t}\t\t\tFis_2 = Fis_2-\u0026gt;next;\t\t}\t\tcount++;\t}\treturn result;}struct ListNode *create(int *data){\tstruct ListNode *head = NULL;\tstruct ListNode *tail = NULL;\tint i,j,k;\tfor(i=0;i\u0026lt;sizeof(data);i++){\t\tint tmp_data = https://www.zhihu.com/api/v4/questions/51266536/data;/t/tstruct ListNode *list = (struct ListNode *)malloc(sizeof(struct ListNode));/t/tlist-/u0026gt;data = tmp_data;/t/tlist-/u0026gt;next = NULL;/t/tif(head ==NULL){/t/t/thead = list;/t/t/ttail = head;/t/t}/t/telse{/t/t/ttail-/u0026gt;next = list;/t/t/ttail = tail-/u0026gt;next;/t/t}/t}/treturn head;}void main(){/tint a = {1,3,5,6};/tint b = {2,4,7,8};/tstruct ListNode *list1 = NULL;/tstruct ListNode *list2 = NULL;/tlist1 = create(a);/tlist2 = create(b);/tprint_list(list1);/tprint_list(list2);/tstruct ListNode *result = mergelists(list1,list2);/tprint_list(result);/t}


    推荐阅读