題目分析:本題難點在於鍊錶節點的位址並非是物件的儲存位址,而是認為給定的數字位址,所以本題的關鍵在於將給定的節點「串」在一起,然後通過翻轉和遍歷解決問題。
解題思路:構建結構體陣列儲存資料(足夠大的陣列),利用陣列本身的連續性將節點串接(此時非有序),然後遍歷陣列,按照數字位址確定鍊錶節點的先後順序,按先後順序將鍊錶節點的位址依次存入另一陣列之中(此時指標的先後順序就是鍊錶節點的先後順序),然後利用函式reverse進行翻轉,最後輸出。
**如下:
#include
#include
#include
#include
using
namespace std;
const
int n=
100005
;typedef
struct node
node;
intmain()
for(i=head;i!=-1
;i=a[i]
.next)
//此處為關鍵,將節點指標按節點先後順序存入陣列
b[k++]=
&a[i]
;for
(i=0
;i<=k-n;i+
=n)//利用節點指標進行翻轉
reverse
(b+i,b+i+n)
;for
(i=0
;i)return0;
}
PTA 1025 反轉鍊錶
給定乙個常數 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 個測試用例。每個測試用例...
PAT 乙級 1025 鍊錶反轉(陣列反轉)
陣列反轉的兩種方式 新創乙個陣列,空間換時間 陣列內部進行反轉 public void reverse int a,int start,int end tmp firstaddr int sum 0 while tmp 1 位址依次存到 list 中,資料存到 data addr 反轉,只需將 li...
PTA 乙級 1025 反轉鍊錶 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 個測試用例。每...