将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
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 <= s->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报错图片
leetcode 上每一个 Node 都是有 val 的。
你的链表的头节点是没有一个有效的 val 的,从第二个节点才开始有 val 。所以合并的时候也跳过了头节点。所以,你在合并 leetcode 的链表的时候,也跳过了第一个节点(两个 1 ),然后增加了一个没有有效 val 的头节点(最后 val 被打印出来是 -1094xxxx),就得到了你看到的结果。
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 我的链表合并以及排序的函数(mergeTwoLists)代码是哪里有问题吗,为什么输出的结果这么怪异。。。 效果图片
21. Merge Two Sorted Lists 问题 Merge two sorted linked lists and return it as a new list. 思路 这个题目很简单也有几个可以考虑的思路,一个是比较直接的方式,重新构造链表,一种是利用递归 思路1 :用新的链表 这里用了一个新的节点了保存结果的链表,这里为了方便链表的扩充,增加一个临时的节点变量(否则每次加入都要遍
NowCoder 题目描述 解题思路 递归 // java public ListNode Merge(ListNode list1, ListNode list2) { if (list1 == null) return list2; if (list2 == null) return list1; if (list1.val <= lis
假设列表“A”是1- 请回顾一下这个,帮我即兴创作
023. Merge k Sorted Lists [H] 问题 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Subscribe to see which companies asked this question 思路 这题明显就是Merge
一、题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。 二、解题思路 Step1.定义一个指向新链表的指针,暂且让它指向NULL; Step2.比较两个链表的头结点,让较小的头结点作为新链表的头结点; Step3.有两种方法。 ①递归比较两个链表的其余节点,让较小的节点作为上一个新节点的后一个节点; ②循环比较两个链表的其余节点,让较小的节点作为上一个新节点的后一