在VS 2022上可以运行但是不知道为什么在leetcode上无法运行,希望有明白的大佬可以指点我一下。
#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;
ListNode LinkListInit();
bool createTail(ListNode L);
bool MakeLoop(ListNode L, int i);
bool hasCycle(ListNode L);
void printLinkList(ListNode L);
ListNode LinkListInit() {
Node* L;
L = (Node*)malloc(sizeof(Node)); //申请结点空间
if (L == NULL) { //判断是否有足够的内存空间
printf("申请内存空间失败\n");
}
L->next = NULL;//将next设置为NULL,初始长度为0的单链表
return L;
}
//输入一个链表的值
bool 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 true;
}
//链表长度
int getLen(ListNode L) {
int len = 0;
ListNode R;
if (L->next == NULL)//头指针为空,则链表不包含元素,返回0
return 0;
else {
R = L->next;
while (R != NULL) {
R = R->next;
len++;
}
}
return len;
}
//按值查找结点值
int GetSize(ListNode L, int num) {
Node* p = L;
int j = 0;
while (p != NULL && p->val != num) {
p = p->next;
j++;
}
return j;
}
//按序号查找结点值
Node* GetElem(ListNode L, int i) {
int j = 1, temp;
Node* p = L->next;
if (i == 0)
return L;//若i = 0,则返回头结点
if (i < 1) {
return NULL;//若i无效,则返回NULL
}
while (p && j < i) {//查找到第i个结点
p = p->next;
j++;
}
return p;
}
ListNode getIntersectionNode(ListNode L1, ListNode L2) {
Node * p, * q,*s,*r1,*r2;//s为第一个相同的结点
ListNode R1, R2,T1,T2,M = NULL;
int temp = 0,flag = 0,L1Size = 0,L2Size = 0,len1 = 0,len2 = 0;
len1 = getLen(L1);
len2 = getLen(L2);
p = L1->next;
q = L2->next;
R1 = L1;
R2 = L2;
T1 = LinkListInit();
T2 = LinkListInit();
s = (Node*)malloc(sizeof(Node));
if (len1 == 1 && len2 == 1) {
if (p->val != q->val)
return T2;
else
return L1;
}
if (len1 == 1 && len2 != 1 || len2 == 1 && len1 != 1) {
for (; p; p = p->next) {
for (; q; q = q->next) {
if (p->val == q->val) {
temp = p->val;
flag = 1;
}
}
if (flag == 1) {
break;
}
q = L2->next;
}
}
for (; p; p = p->next) {
for (; q; q = q->next) {
if ((p->val == q->val) && (p->next->val == q->next->val)) {
temp = p->val;
flag = 1;
}
}
if (flag == 1) {
break;
}
q = L2->next;
}
L1Size = GetSize(L1, temp);
L2Size = GetSize(L2, temp);
R1 = GetElem(L1, L1Size-1);
R2 = GetElem(L2, L2Size-1);
r1 = R1->next;
r2 = R2->next;
T1 = R1;
while (r1 != NULL && r2 != NULL) {
if (r1->val != r2->val) {
return T2;
}
r1 = r1->next;
r2 = r2->next;
}
return T1;
}
//输出链表
void printLinkList(ListNode L)
{
ListNode p;
p = L->next;
if ( p== NULL) {
printf("null");
}
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();
printf("输入第一个链表:\n");
createTail(L1);
printf("输入第二个链表:\n");
createTail(L2);
L = getIntersectionNode(L1, L2);
printLinkList(L);
return 0;
}
下面是在VS 2022上的运行效果图,当有相交的链表时,输出相交链表
没有时输出null
leetcode上面的报错,说是我例子一没有通过,但是我感觉是他的样例有问题。。。
预期结果应该是1而不是8吧