PTA1025 反轉陣列(啟發式思路)

2021-10-01 20:28:38 字數 740 閱讀 8649

題目分析:本題難點在於鍊錶節點的位址並非是物件的儲存位址,而是認為給定的數字位址,所以本題的關鍵在於將給定的節點「串」在一起,然後通過翻轉和遍歷解決問題。

解題思路:構建結構體陣列儲存資料(足夠大的陣列),利用陣列本身的連續性將節點串接(此時非有序),然後遍歷陣列,按照數字位址確定鍊錶節點的先後順序,按先後順序將鍊錶節點的位址依次存入另一陣列之中(此時指標的先後順序就是鍊錶節點的先後順序),然後利用函式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 個測試用例。每...