PAT Basic 1075 鍊錶元素分類

2021-09-26 11:02:51 字數 2481 閱讀 7043

給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 [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...