QQ u don't learn le
2018-03-09 15:09c语言数据结构链表空指针问题
10这是一个在LeetCode上面的问题,就是把两个已经排序的链表合成一个也是排序的链表,如{1,2,3},{2,3,5}变为{1,2,2,3,3,5};
在指针传入mergeTwoLists(struct ListNode* l1, struct ListNode* l2) 函数之前,就对其进行验证,看其是否为空指针
结果说明不是空指针
但是最后结果却说l2是一个空指针,想不通
结果
附上源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct ListNode {
int val;
struct ListNode *next;
};
void Print(struct ListNode* l);
struct ListNode* CreateList(int a[]);
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2);
int main() {
int a[] = { 1,2,3,4 };
int b[] = { 1,2,3,4,5 };
struct ListNode* ptr1 = CreateList(a);
struct ListNode* ptr2 = CreateList(b);
if (ptr2 == NULL)
printf("a null");
printf("not a null\n");
printf("%d", ptr2->val);
printf("%d", ptr2->next->val);
printf("%d", ptr2->next->next->val);
printf("%d", ptr2->next->next->next->val);
struct ListNode* ptr3 = mergeTwoLists(ptr1, ptr2);
//printf("%d", ptr3->val);
//printf("%d", ptr3->next->val);
//printf("%d", ptr3->next->next->val);
//printf("%d", ptr3->next->next->next->val);
system("pause");
}
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
//将l1 和 l2 合成 l3, 并返回指向l3的指针
{
if (l1 == NULL&&l2 == NULL) return NULL;
struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode));
res->val = 0;
res->next = NULL;
struct ListNode* head = res;
while (l1 != NULL || l2 != NULL)
{
if (l1 == NULL)
{
res->next = l2;
res = l2;
l2 = l2->next;
}
else if(l2==NULL)
{
res->next = l1;
res = l1;
l1 = l1->next;
}
if (l1->val >= l2->val)
{
res->next = l2;
res = l2;
l2 = l2->next;
}
else
{
res->next = l1;
res = l1;
l1 = l1->next;
}
}
return head->next;
}
struct ListNode* CreateList(int a[])//用数组a创造一个链表
{
struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode));
res->val = 0;
res->next = NULL;
struct ListNode* head = res;
struct ListNode*new;
int length = sizeof(a);
//printf("%d", length);
for (int i = 0; i < length; i++)
{
res->val = a[i];
//printf_s("%d-------", res->val);
new = (struct ListNode*)malloc(sizeof(struct ListNode));
new->val = 0;
new->next = NULL;
res->next = new;
res = res->next;
}
//printf("%d", head->val);
//printf("%d", head->next->val);
//printf("%d", head->next->next->val);
//printf("%d", head->next->next->next->val);
return head;
}
- 点赞
- 回答
- 收藏
- 复制链接分享
2条回答
为你推荐
- 链表上直接使用Next指针与加上活动指针p后使用Next指针有什么区别?
- c语言
- c++
- 1个回答
- C语言fopen打开文件失败
- c语言
- 4个回答
- c语言中两个链表的合并(不用结点的方式)总是错误的
- c
- 链表
- 2个回答
- c语言数据结构链表空指针问题
- c
- 源代码
- malloc
- 链表
- 指针
- 2个回答
- c语言数据结构词索引表出了点问题,谁能帮忙看看呀
- c
- 索引
- 数据结构
- 3个回答
换一换