PAT乙級 1075 鍊錶元素分類 25分

2021-10-05 03:24:16 字數 2300 閱讀 6394

題目描述:

給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 [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 (≤1e​5​​);以及正整數k

(≤1e​3​​)。結點的位址是 5 位非負整數,null 位址用 −1 表示。 接下來有 n 行,每行格式為:

address data next

其中address是結點位址;data是該結點儲存的資料,為 [−1e5​​,1e​5​​] 區間內的整數;next是下一結點的位址。題目保證給出的鍊錶不為空。

輸出格式:

對每個測試用例,按鍊錶從頭到尾的順序輸出重排後的結果鍊錶,其上每個結點佔一行,格式與輸入相同。

輸入樣例:

00100910

23333

1027777

00000

099999

00100

1812309

68237-6

23333

33218-4

00000

48652-2

-199999

568237

27777

1148652

12309

733218

輸出樣例:

33218-4

68237

68237-6

48652

48652-2

12309

12309

700000

00000

099999

99999

523333

23333

1000100

00100

1827777

2777711-

1

我的一點小思路:

1.用結構體存放每個節點的資訊,隨後定義結構體的陣列,用雜湊的方式儲存每個節點(便於尋找該節點的下乙個節點,如**中的node[i].next)。

2.注意輸出格式

我的**:

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+10;

struct node

;node node[maxn]

;vector answer,require,rest,result;

intmain()

for(

int i=first;i!=-1

;i=node[i]

.next)

else

if(node[i]

.value>=

0&&node[i]

.value<=k)

else

}//將三部分按照題目要求儲存到result中

for(

int i=

0;isize()

;i++

)for

(int i=

0;isize()

;i++

)for

(int i=

0;isize()

;i++

)//修改result中節點的next位址

for(

int i=

1;isize()

;i++

) result[result.

size()

-1].next=-1

;for

(int i=

0;isize()

;i++

)else

}return0;

}

PAT 乙級 1075 鍊錶元素分類 25

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 ...

PAT乙級1075 鍊錶元素分類 Cpp

給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 0,k 區間內的元素都排在大於 k 的元素前面。但每一類內部元素的順序是不能改變的。例如 給定鍊錶為 18 7 4 0 5 6 10 11 2,k 為 10,則輸出應該為 4 6 2 7 0 5 10 18...

PAT 乙級 1075 鍊錶元素分類 25分

我的個人 部落格 blog blog 283 歡迎交換友鏈 1075 鍊錶元素分類 25分 給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 0,k 區間內的元素都排在大於 k 的元素前面。但每一類內部元素的順序是不能改變的。例如 給定鍊錶為 18 7 4...