反轉鍊錶
定義乙個node用來存放資料data和下一位址next,為了通過乙個節點的位址來找到這個節點,容易想到的辦法是讓這個位址就是他的陣列下標。所以在輸入節點時,先輸入節點的位址temp,再用vector來存放每次輸入的結點的資料傳data和下一節點的位址next
每k個節點呼叫一次reverse做反轉
#include
#define maxn 100010
using
namespace std;
struct node
;int
main()
int p=head,num=0;
int list[maxn]
;while
(p!=-1
)//做反轉
for(
int i=
0;i+k=k)reverse
(&list[i]
,&list[i+k]);
for(
int i=
0;i1;i++
)printf
("%05d %d %05d\n"
,list[i]
,v[list[i]
].data,list[i+1]
);printf
("%05d %d -1"
,list[num-1]
,v[list[num-1]
].data)
;return0;
}
參考: PAT 1015 反轉鍊錶(25)
感覺這是30道真題裡最難的一道了,比其他25分的題主要難在它的陷阱太多,題目並沒有明確指出,用了好久才ac,看到所有測試點都不紅了,激動。經過多次嘗試,總結的陷阱主要有 1.看清題意!看清鍊錶如何反轉!2.首位址為 1的情況分類出來 3.輸出最後乙個節點是next必須為 1.4.輸入的節點中的無效節...
1015 反轉鍊錶 C
題目 題目描述 給定乙個常數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...
PAT 反轉鍊錶
給定乙個常數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個結點的位址 結點...