/*
題目描述
已有a、b兩個鏈表,每個鏈表中的結點包括學號、成績。要求把兩個鏈表合并,按學號升序排列。
輸入
第一行,a、b兩個鏈表元素的數量N、M,用空格隔開。 接下來N行是a的資料 然后M行是b的資料 每行資料由學號和成績兩部分組成
輸出
按照學號升序排列的資料
樣例輸入
2 3
5 100
6 89
3 82
4 95
2 10
樣例輸出
2 10
3 82
4 95
5 100
6 89
*/
/*
typedef struct Node
{
char cNum[30];
int score;
struct Node * pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;

pNew=pTemp=(node *)malloc(sizeof(node));
while(cnt<n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
getchar();
Head1=Createlist(Head1,N);
Head2=Createlist(Head2,M);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}*/
uj5u.com熱心網友回復:
樣例可以通過,空鏈表也沒問題,但是在oj上通過不了,真沒辦法了,上來問問大家uj5u.com熱心網友回復:
學號用整數型別保存而不是char陣列uj5u.com熱心網友回復:
題目出的有問題,你的也太復雜uj5u.com熱心網友回復:
樓主沒按照學號升序合并呢uj5u.com熱心網友回復:
if(strcmp(pTemp->cNum,Head->cNum)>0) 比較不出學號大小uj5u.com熱心網友回復:
有的,樣例可以通過
uj5u.com熱心網友回復:
用字符陣列也可以吧,我感覺和這個沒啥關系
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
uj5u.com熱心網友回復:
就是跟這個有關系。比如“2”分別和“1”、“10”比較,結果如何你自己運行看看。
uj5u.com熱心網友回復:
就是跟這個有關系。比如“2”分別和“1”、“10”比較,結果如何你自己運行看看。 學號用整數型別保存而不是char陣列
用字符陣列也可以吧,我感覺和這個沒啥關系
收到,我試一下
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
合并沒有問題,之前我也是像你那樣寫的,但是輸了0 0會出現指標例外,就是沒有考慮到空鏈表的情況,可能是創建鏈表寫的不夠好,所以修改成我現在寫的那樣,防止了空鏈表例外的情況,找到測驗不通過的問題了,是學號不能陣列
uj5u.com熱心網友回復:
感謝各位,發現是學號問題,剛剛看了測驗是這個原因uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
合并沒有問題,之前我也是像你那樣寫的,但是輸了0 0會出現指標例外,就是沒有考慮到空鏈表的情況,可能是創建鏈表寫的不夠好,所以修改成我現在寫的那樣,防止了空鏈表例外的情況,找到測驗不通過的問題了,是學號不能陣列
沒問題嗎?那你的pTemp申請的空間哪去了?還能找到嗎?
你的回圈里pTemp = Head1;這句已經把申請的空間地址覆寫了,還能找到嗎?后面free(Head1);那么Head1是剛才申請的空間嗎?不要以為測驗沒問題,就沒問題。從邏輯上分析一下,看看會不會有問題。
另外,你的合并就是鏈表1的尾部接上鏈表2的頭嘛,找到尾部,接上頭部就好了。
uj5u.com熱心網友回復:
if(strcmp(pTemp->cNum,Head->cNum)>0) 比較不出學號大小
樓主的學號用的字串,字串大小的比較不就是用strcmp嗎?
另外'1' < '2'這不是正確的嗎?
uj5u.com熱心網友回復:
if(strcmp(pTemp->cNum,Head->cNum)>0) 比較不出學號大小
樓主的學號用的字串,字串大小的比較不就是用strcmp嗎?
另外'1' < '2'這不是正確的嗎?
對于兩位數的確實是"10" < "2"
uj5u.com熱心網友回復:
但是輸入0 0后,除錯打斷點到合并鏈表的while判斷會顯示指標例外,請問下這樣應該怎么改呢?uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
合并沒有問題,之前我也是像你那樣寫的,但是輸了0 0會出現指標例外,就是沒有考慮到空鏈表的情況,可能是創建鏈表寫的不夠好,所以修改成我現在寫的那樣,防止了空鏈表例外的情況,找到測驗不通過的問題了,是學號不能陣列
沒問題嗎?那你的pTemp申請的空間哪去了?還能找到嗎?
你的回圈里pTemp = Head1;這句已經把申請的空間地址覆寫了,還能找到嗎?后面free(Head1);那么Head1是剛才申請的空間嗎?不要以為測驗沒問題,就沒問題。從邏輯上分析一下,看看會不會有問題。
另外,你的合并就是鏈表1的尾部接上鏈表2的頭嘛,找到尾部,接上頭部就好了。
但是輸入0 0后,除錯打斷點到合并鏈表的while判斷會顯示指標例外,請問下這樣應該怎么改呢?
uj5u.com熱心網友回復:
建議樓主的學號直接用long型別,用char *反而比較復雜~ #include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
合并沒有問題,之前我也是像你那樣寫的,但是輸了0 0會出現指標例外,就是沒有考慮到空鏈表的情況,可能是創建鏈表寫的不夠好,所以修改成我現在寫的那樣,防止了空鏈表例外的情況,找到測驗不通過的問題了,是學號不能陣列
沒問題嗎?那你的pTemp申請的空間哪去了?還能找到嗎?
你的回圈里pTemp = Head1;這句已經把申請的空間地址覆寫了,還能找到嗎?后面free(Head1);那么Head1是剛才申請的空間嗎?不要以為測驗沒問題,就沒問題。從邏輯上分析一下,看看會不會有問題。
另外,你的合并就是鏈表1的尾部接上鏈表2的頭嘛,找到尾部,接上頭部就好了。
但是輸入0 0后,除錯打斷點到合并鏈表的while判斷會顯示指標例外,請問下這樣應該怎么改呢?
合并函式里,不會對輸入的數值判斷呀,我說的是合并函式,修改的也是合并函式即:Combinelist
uj5u.com熱心網友回復:
建議樓主的學號直接用long型別,用char *反而比較復雜~
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char cNum[30];
int score;
struct Node *pNext;
}node;
//創建鏈表
node* Createlist(node *Head,int n)
{
node *pNew,*pTemp;
int cnt=0;
Head=NULL;
pNew=pTemp=(node *)malloc(sizeof(node));
if (!pNew)
exit(0);
while(cnt < n)
{
if(cnt==0)
{
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
//pTemp=pNew;
Head=pTemp;
cnt++;
}
else
{
pNew=(node *)malloc(sizeof(node));
scanf("%s %d",pNew->cNum,&pNew->score);
pNew->pNext=NULL;
pTemp->pNext=pNew;
pTemp=pNew;
cnt++;
}
}
return Head;
}
//合并鏈表
node* Combinelist(node* Head1,node* Head2)
{
node* Head=Head1;
while(Head1->pNext != NULL)
{
Head1=Head1->pNext;
}
Head1->pNext=Head2;
return Head;
/*
node* Head=Head1;
node* pTemp=(node *)malloc(sizeof(node));
while(Head1!=NULL)
{
pTemp=Head1;
Head1=Head1->pNext;
}
pTemp->pNext=Head2;
free(Head1);
return Head;
*/
}
//排序鏈表
node* sort(node* Head,int n,int m)
{
int i,j;
int cnt=n+m;
node* pTemp;
char Tempnum[30];
int Tempscore;
node * Newhead=Head;
pTemp=(node *)malloc(sizeof(node));
for(i=0;i<cnt-1;i++)
{
for(j=0;j<cnt-1-i;j++)
{
pTemp=Head;
Head=Head->pNext;
if(strcmp(pTemp->cNum,Head->cNum)>0)
{
strcpy(Tempnum,Head->cNum);
Tempscore=Head->score;
strcpy(Head->cNum,pTemp->cNum);
Head->score=pTemp->score;
strcpy(pTemp->cNum,Tempnum);
pTemp->score=Tempscore;
}
}
Head=Newhead;
}
return Newhead;
}
//輸出鏈表
node* Printlist(node* Head)
{
node * Newhead=Head;
while(Head!=NULL)
{
printf("%s %d\n",Head->cNum,Head->score);
Head=Head->pNext;
}
return Newhead;
}
int main()
{
node *Head1=NULL;
node *Head2=NULL;
node *Head=NULL;
int N,M;
scanf("%d %d",&N,&M);
//getchar();
Head1=Createlist(Head1,N);
Printlist(Head1);
Head2=Createlist(Head2,M);
Printlist(Head2);
Head=Combinelist(Head1,Head2);
Head=sort(Head,N,M);
Printlist(Head);
return 0;
}
供參考~
樓主的合并有問題~
合并沒有問題,之前我也是像你那樣寫的,但是輸了0 0會出現指標例外,就是沒有考慮到空鏈表的情況,可能是創建鏈表寫的不夠好,所以修改成我現在寫的那樣,防止了空鏈表例外的情況,找到測驗不通過的問題了,是學號不能陣列
沒問題嗎?那你的pTemp申請的空間哪去了?還能找到嗎?
你的回圈里pTemp = Head1;這句已經把申請的空間地址覆寫了,還能找到嗎?后面free(Head1);那么Head1是剛才申請的空間嗎?不要以為測驗沒問題,就沒問題。從邏輯上分析一下,看看會不會有問題。
另外,你的合并就是鏈表1的尾部接上鏈表2的頭嘛,找到尾部,接上頭部就好了。
但是輸入0 0后,除錯打斷點到合并鏈表的while判斷會顯示指標例外,請問下這樣應該怎么改呢?
合并函式里,不會對輸入的數值判斷呀,我說的是合并函式,修改的也是合并函式即:Combinelist
好的,謝謝兄弟,這個問題我想了很久
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/30966.html
標籤:C語言
上一篇:STM32F1 模擬 全雙工 四線SPI 對25Q127 讀寫
下一篇:入門小白求大佬指點!
