1025 反轉鍊錶 25 分

2021-09-24 21:39:24 字數 2568 閱讀 8351

題目

給定乙個常數 k

kk 以及乙個單鏈表 l

ll,請編寫程式將 l

ll 中每 k

kk 個結點反轉。例如:給定 l

ll 為 1→

\rightarrow

→ 2→

\rightarrow

→ 3→

\rightarrow

→ 4→

\rightarrow

→ 5→

\rightarrow

→ 6,k

kk 為 3

33,則輸出應該為 3→

\rightarrow

→ 2→

\rightarrow

→ 1→

\rightarrow

→ 6→

\rightarrow

→ 5→

\rightarrow

→ 4;如果 k

kk 為 4,則輸出應該為 4→

\rightarrow

→ 3→

\rightarrow

→ 2→

\rightarrow

→ 1→

\rightarrow

→ 5→

\rightarrow

→ 6,即最後不到 k

kk 個元素不反轉。

輸入格式

每個輸入包含 1 個測試用例。每個測試用例第 1 行給出第 1 個結點的位址、結點總個數正整數 n(≤

10​5)

n(\le10​^5)

n(≤10​

5)、以及正整數 k(≤

n)k(\le n)

k(≤n

),即要求反轉的子鏈結點的個數。結點的位址是 5 位非負整數,null 位址用 −1 表示。接下來有 n 行,每行格式為:

address data next

輸出格式

對每個測試用例,順序輸出反轉後的鍊錶,其上每個結點佔一行,格式與輸入相同。

輸入樣例

00100 6 4

00000 4 99999

00100 1 12309

68237 6 -1

33218 3 00000

99999 5 68237

12309 2 33218

輸出樣例
00000 4 33218

33218 3 12309

12309 2 00100

00100 1 99999

99999 5 68237

68237 6 -1

題目分析

題目考察鍊錶反轉,採用單鏈表更方便;

仔細分析題目,結點的位址是 5 位非負整數,而結點總個數正整數 n(≤

10​5)

n(\le10​^5)

n(≤10​

5),我們給每個結點編號,並且編號從 0 開始,那麼編號的範圍在[0,

99999

][0, 99999]

[0,999

99],剛好對應105

10^5

105維的陣列,因此可採用靜態鍊錶,這樣做就無需建立鍊錶的過程。

採用靜態鍊錶還有乙個原因,題目輸入陣列是無序的,要建立鍊錶,就必須將輸入資料存放到陣列,而靜態鍊錶正是通過陣列實現,這應該就是出題人意圖所在。

演算法分析

首先需要遍歷一遍整數鍊錶,時間複雜度為n

nn,同時每遍歷k

kk個結點,又要迴圈k

kk次實現反轉,因此整個時間複雜度為o(n

×k)o(n\times k)

o(n×k)

;空間複雜度為o(n

)o(n)

o(n)

。**

#include

#include

using

namespace std;

const

int maxsize =

100000

;struct node

;void

reverse

(node *node,

int&head,

int k)

else

count--;}

node[l]

.next = tmp;

if(root ==-1

) head = p;

else

node[root]

.next = p;

root = l;

} p = tmp;}}

intmain()

reverse

(node, head, k)

;int p = head;

while

(p !=-1

)return0;

}

提交結果

1025 反轉鍊錶 (25 分)

給定乙個常數 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 個測試用例。每...

1025 反轉鍊錶 (25 分)

1025 反轉鍊錶 25 分 給定乙個常數 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 個元素不反轉。輸入格式 每...

1025 反轉鍊錶 25 分

給定乙個常數 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 個測試用例。每...