在做題時刷到一道題,需要傳入陣列和陣列的長度,回傳一個鏈表,但是在呼叫函式后會卡在這個方法里,也不知道是為啥錯誤,希望大佬能解答一下
以下為函式:
List CreatList(int x[],int n){
List L,p,q;
L = (List)malloc(sizeof(struct Node));
p = L;
for(int i = 0 ; i < n; i ++){
printf("ok");
L -> Data = x[i];
q = L;
L = L -> Next;
}
L -> Next = NULL;
return p;
}
以下為源代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List CreatList(int x[],int n);
int* ReArry(int* x,int len);
int a[1000005],b[1000005];
int main(){
List l1,l2;
int k1=0,k2=0,n,k=0;
while(1)
{
scanf("%d",&n);
if(n==-1) break;
a[k1++]=n;
}
while(1)
{
scanf("%d",&n);
if(n==-1) break;
b[k2++]=n;
}
ReArry(a,k1);
ReArry(b,k2);
l1 = CreatList(a,k1);
printf("=====\n");
l2 = CreatList(b,k2);
return 0;
}
List CreatList(int x[],int n){
List L,p,q;
L = (List)malloc(sizeof(struct Node));
p = L;
for(int i = 0 ; i < n; i ++){
printf("ok");
L -> Data = x[i];
q = L;
L = L -> Next;
}
L -> Next = NULL;
return p;
}
int* ReArry(int *x,int n){
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(x[i]>x[j])
{
t = x[i];
x[i] = x[j];
x[j] = t;
}
}
}
return x;
}
uj5u.com熱心網友回復:
你使用了沒有初始化的物件List CreatList(int x[],int n){
List L,p,q;
L = (List)malloc(sizeof(struct Node));//你只在這里malloc
p = L;
for(int i = 0 ; i < n; i ++){
printf("ok");
L -> Data = x[i];
q = L;
L = L -> Next;//然而在這里的next并沒有malloc
}
L -> Next = NULL;
return p;
}
uj5u.com熱心網友回復:
這里應該用回圈來給L的每個結點分配記憶體
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include <stdio.h>
//#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List CreatList(int x[],int n);
//int* ReArry(int* x,int len);
void ReArry(int* x,int len);
//int a[1000005],b[1000005];
#define MAX_SIZE 8
int main()
{
List l1,l2;
int *a, *b;
int k1=0,k2=0,n;//,k=0;
a = (int *)malloc(sizeof(int) * MAX_SIZE);
if (!a)
exit(0);
while(1)
{
scanf("%d",&n);
if(n==-1)
break;
a[k1++]=n;
if (k1 % MAX_SIZE == 0) {
a = (int *)realloc(a, sizeof(int) * (k1+MAX_SIZE));
if (!a)
exit(0);
}
}
b = (int *)malloc(sizeof(int) * MAX_SIZE);
if (!b)
exit(0);
while(1)
{
scanf("%d",&n);
if(n==-1)
break;
b[k2++]=n;
if (k2 % MAX_SIZE == 0) {
b = (int *)realloc(b, sizeof(int) * (k2+MAX_SIZE));
if (!b)
exit(0);
}
}
ReArry(a,k1);
ReArry(b,k2);
l1 = CreatList(a,k1);
printf("=====\n");
l2 = CreatList(b,k2);
free(a);
free(b);
return 0;
}
List CreatList(int x[],int n)
{
List L,p,q;
L = (List)malloc(sizeof(struct Node));
p = L;
for(int i = 0 ; i < n; i ++){
printf("ok");
q = (List)malloc(sizeof(struct Node));
if (!q)
exit(0);
q -> Data = x[i];
p->Next = q;
p = q;
}
p -> Next = NULL;
return L;
}
//int* ReArry(int *x,int n)
void ReArry(int *x,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(x[i]>x[j])
{
t = x[i];
x[i] = x[j];
x[j] = t;
}
}
}
//return x;
}
供參考~
創建鏈表的部分有問題;
其他個人不很好的地方一并修改了,可以參考一下;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/186643.html
標籤:C語言
上一篇:堆疊 迷宮 有沒有大神呀
