1025 反轉鍊錶 25

2022-03-03 04:03:04 字數 2353 閱讀 5845

原題:

實現思路: 解決本題有2個關鍵點,第1個是怎麼把一堆打亂的鍊錶節點, 按照頭結點開始,

排好序.第2個是給我們按順序的一組數字, 再給個k, 我們怎麼對這組數進行正確翻轉.

也就是先解決:

輸入  

00100 6 4

00000 4 99999

00100 1 12309

68237 6 -1

33218 3 00000

99999 5 68237

12309 2 33218

輸出

00100 1 12309

12309 2 33218

33218 3 00000

00000 4 99999

99999 5 68237

68237 6 -1

然後解決:

假設 k = 3

輸入: 1 2 3 4 5 6 7 8 9

輸出 3 2 1 6 5 4 8 9

第1個關鍵點, 可以採用開乙個10萬空間的陣列, 讓address成為陣列下標, 這樣我們對陣列按照

頭結點順序排序時, 時間複雜只為n, 遍歷一遍即可完成排序.

第2個關鍵點, 比較容易, 在草稿紙上找找規律, 不難寫出.

注意本題最後乙個測試的坑: 輸入可能存在"報廢節點", 所以錄入資料時我們要檢查next是否已經

等於-1, 不能認為給n個資料, 鍊錶中就一定有n個資料.

版本1: 倒數第2個測試點執行超時, 無法ac

#include #include struct node ;

typedef struct node s_node;

int find (s_node nd, int n, int addr);

void reverse (int source, int dest, int k, int n);

int main ()

// 按照順序, 進行排序賦值

for (i=1; i<=n; i++)

}free(temp);

for (i=1; i<=n; i++)

// 反轉序號

reverse(stnum, renum, k, n);

// 根據反轉後的序號, 調整nd

for (i=1; i<=n-1; i++)

// 最後乙個數單獨列印

j = renum[n];

printf("%05d %d %d\n", nd[j].address, nd[j].data, -1);

return 0;

}// 返回位址是addr的節點下標

int find (s_node nd, int n, int addr)

}return pos;

}void reverse (int source, int dest, int k, int n)

}// 最後不夠的數, 加入末尾

if (i != n) }}

版本2: 完整c語言實現 - 可以ac

參考:

#include #include struct node ;

typedef struct node s_node;

void reverse (int source, int dest, int k, int n);

int main ()

// 從頭位址開始, 按順序賦值

for (i=1; i<=n; i++)

}free(temp); // 用不到了

for (i=1; i<=n; i++)

// 反轉序號

reverse(stnum, renum, k, n);

// 根據反轉後的序號, 調整nd, 也就是調整列印順序

for (i=1; i<=n-1; i++)

// 最後乙個數單獨列印

j = renum[n];

printf("%05d %d %d\n", nd[j].address, nd[j].data, -1);

return 0;

}void reverse (int source, int dest, int k, int n)

}// 最後不夠的數, 加入末尾

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個測試用例。每個測試用例第1行給出第1個結點的位址 結點...

1025 反轉鍊錶 25

define crt secure no warnings include include include include include include using namespace std int main int p start stacks,q 之前的想法中,每滿足k個,就輸出棧內的元素和...

1025 反轉鍊錶 25

時間限制 300 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如 給定l為1 2 3 4 5 6,k為3,則輸出應該為3 2 1 6 5 4 如果k為4,則輸出應該為...