題目描述:
給定乙個單鏈表,請編寫程式將鍊錶元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 [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 (≤1e5);以及正整數k
(≤1e3)。結點的位址是 5 位非負整數,null 位址用 −1 表示。 接下來有 n 行,每行格式為:
address data next
其中
address
是結點位址;data
是該結點儲存的資料,為 [−1e5,1e5] 區間內的整數;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...