将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 ``` c++ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include typedef struct Node{ int val; struct Node *next; }Node,* ListNode; void printLinkList(ListNode L); ListNode createTail(ListNode L); //初始化一个链表 ListNode LinkListInit() { Node* L; L = (Node*)malloc(sizeof(Node)); //申请结点空间 if (L == NULL) { //判断是否有足够的内存空间 printf("申请内存空间失败\n"); } L->next = NULL;//将next设置为NULL,初始长度为0的单链表 return L; } //输入一个升序链表 ListNode createTail(ListNode L) { int x; Node* s, * r = L; printf("输入一个升序链表:\n"); scanf("%d", &x); while (x != 9999) { s = (Node*)malloc(sizeof(Node)); s->val = x; r->next = s; r = s; scanf("%d", &x); } r->next = NULL; return L; } //链表拼接 ListNode mergeTwoLists(ListNode L1, ListNode L2) { ListNode r, s,P; Node* m,*p; P = LinkListInit(); p = P; r = L1->next; s = L2->next; if (r == NULL) { return L2; } else if(s == NULL){ return L1; } else if (s == NULL && r == NULL) { return 0; } while (r != NULL && s != NULL) { if (r->val val) { p->next = r; p = r; r = r->next; //p->next = NULL; } else { p->next = s; p = s; s = s->next; } } if (r != NULL) { p->next = r; p = r; r = r->next; } if (s != NULL) { p->next = s; p = s; s = s->next; } p->next = NULL; return P; } //输出链表 void printLinkList(ListNode L) { ListNode p; p = L->next; if (p == NULL) { printf(" "); } while (p) { printf("%d ", p->val); p = p->next; } printf("\n"); } int main(void) { ListNode L1, L2,R,L; L1 = LinkListInit(); L2 = LinkListInit(); L = LinkListInit(); R = LinkListInit(); createTail(L1); createTail(L2); R = mergeTwoLists(L1, L2); printLinkList(R); return 0; } ``` 我的链表合并以及排序的函数(mergeTwoLists)代码是哪里有问题吗,为什么我在VS上运行没报错,leetcode上运行就报错了 效果图片  leetcode报错图片 