給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 [0, k] 區間內的元素都排在大於 k 的元素前面。但每一類內部元素的順序是不能改變的。例如:給定鍊錶為 18→7→-4→0→5→-6→10→11→-2,k 為 10,則輸出應該為 -4→-6→-2→7→0→5→10→18→11。
輸入格式:
每個輸入包含乙個測試用例。每個測試用例第 1 行給出:第 1 個結點的位址;結點總個數,即正整數n (≤105);以及正整數k (≤103)。結點的位址是 5 位非負整數,null 位址用 −1 表示。
接下來有 n 行,每行格式為:
address data next
其中address
是結點位址;data
是該結點儲存的資料,為 [−105,105] 區間內的整數;next
是下一結點的位址。題目保證給出的鍊錶不為空。
輸出格式:
對每個測試用例,按鍊錶從頭到尾的順序輸出重排後的結果鍊錶,其上每個結點佔一行,格式與輸入相同。
輸入樣例:
00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218
輸出樣例:33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1
由題意可知鍊錶元素應分成三類,
負數節點的值在區間 [0,k],注意閉區間
節點的值大於k
還要注意要保持三個部分內部的順序。
可見只要分出來三類,然後把三部分按照順序輸出就行了,鍊錶的儲存方法和輸出方法和 1025反換鍊錶類似。
可以一次遍歷,分三類把位址分別儲存到三個陣列,最後再分別輸出。也可以分三次遍歷,每次都把同一類元素存到同乙個陣列裡,最後直接順序輸出。前者省時間,後者省空間,差別不大。但是第一種寫法要注意三個部分有可能某個部分為空,所以銜接處的處理比較麻煩,容易錯。
#include
#include
intmain()
,data[
100001]=
,output[
100001]=
,cnt=0;
scanf
("%d %d %d"
,&head,
&n,&k)
;for
(int i=
0;i)for
(int i=head;i !=-1
;i = list[i]
)for
(int i=head;i !=-1
;i = list[i]
)for
(int i=head;i !=-1
;i = list[i]
)for
(int i=
0;i < cnt;i++
)else
}return0;
}
history
一開始做的一次遍歷分三類的寫法,整體的變數太多,邏輯比較混亂
#include
#include
intmain()
,data[
100001]=
;int cls1[
100001]=
,cls2[
100001]=
,cls3[
100001]=
,cnt1=
0,cnt2=
0,cnt3=0;
scanf
("%d %d %d"
,&head,
&n,&k)
;for
(int i=
0;i)for
(int i=head;i!=-1
;i = list[i]
)else
if(data[i]
<= k)
else
}for
(int i=
0;i)else
else
if(cnt3 !=0)
else}}
for(
int i=
0;i)else
else}}
for(
int i=
0;i)else
}return0;
}
pat basic 1075 鍊錶元素分類
給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 0,k 區間內的元素都排在大於 k 的元素前面。但每一類內部元素的順序是不能改變的。例如 給定鍊錶為 18 7 4 0 5 6 10 11 2,k 為 10,則輸出應該為 4 6 2 7 0 5 10 18...
PAT Basic 反轉鍊錶 25 鍊錶
給定 個常數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個結點的位址 結點...
1075 鍊錶元素分類
給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 0,k 區間內的元素都排在大於 k 的元素前面。但每一類內部元素的順序是不能改變的。例如 給定鍊錶為 18 7 4 0 5 6 10 11 2,k 為 10,則輸出應該為 4 6 2 7 0 5 10 18...