題目:
給定一個常數 K 以及一個單鏈表 L,請撰寫程式將 L 中每 K 個結點反轉。例如:給定 L 為 1→2→3→4→5→6,K 為 3,則輸出應該為 3→2→1→6→5→4;如果 K 為 4,則輸出應該為 4→3→2→1→5→6,即最后不到 K 個元素不反轉。
輸入格式:
每個輸入包含 1 個測驗用例。每個測驗用例第 1 行給出第 1 個結點的地址、結點總個數正整數 N (≤10?0000??)、以及正整數 K (≤N),即要求反轉的子鏈結點的個數。結點的地址是 5 位非負整數,NULL 地址用 ?1 表示。
接下來有 N 行,每行格式為:
Address Data Next
其中 Address 是結點地址,Data 是該結點保存的整數資料,Next 是下一結點的地址。
輸出格式:
對每個測驗用例,順序輸出反轉后的鏈表,其上每個結點占一行,格式與輸入相同。
輸入樣例:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
輸出樣例:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
我的C語言代碼:
#include <stdio.h>
struct NODE{
int address;
int data;
int next;
}node[100000],temp;
int main(void){
int init,N,K,i,j,m;
scanf("%d %d %d",&init,&N,&K);
//將原始資料放入結構體陣列中
for(i=0;i<N;i++){
scanf("%d %d %d",&node[i].address,&node[i].data,&node[i].next);
}
//結構體陣列排序:1.將與init地址相同的結構體放在第0個位置
for(i=0;i<N;i++){
if(init==node[i].address){
temp=node[0];
node[0]=node[i];
node[i]=temp;
break;
}
}
//結構體陣列排序:2.剩下的冒泡排序
for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
if(node[i].next==node[j].address){
temp=node[i+1];
node[i+1]=node[j];
node[j]=temp;
break;
}
}
}
//每K個結點反轉
for(m=0;m<N/K;m++){
for(j=m*K;j<m*K+(K+1)/2;j++){
temp=node[j];
node[j]=node[(2*m+1)*K-j-1];
node[(2*m+1)*K-j-1]=temp;
}
}
//列印結構體陣列
for(i=0;i<N-1;i++){
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
}
printf("%05d %d -1\n",node[i].address,node[i].data);
return 0;
}
運行的結果

最后一個測驗點錯誤,但是我找不出問題在哪里,請大神們幫幫忙,謝謝~
uj5u.com熱心網友回復:
資料結構對單鏈表進行資料排序 http://bbs.csdn.net/topics/392201633uj5u.com熱心網友回復:
非常感謝教我用單鏈表排序的方法,我也去看看。另外,這個題目我是用結構體陣列做的,能否幫忙檢查上面的代碼,謝謝呀轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/240247.html
標籤:C語言
上一篇:二維陣列 c語言解決問題
