題目連結:
題目意譯:
你被給定一個連結串列(Linked List)的開頭節點 head,以及一整數 k。
回傳將從開頭到結尾的第 k 個節點與從結尾到開頭的第 k 個節點交換後的連結串列之開頭節點(串列索引值從 1 開始)。
限制:
串列節點數為 n。
1 ≦ k ≦ n ≦ 10 ^ 5
0 ≦ Node.val ≦ 100
範例測資:
範例 1:
輸入: head = [1,2,3,4,5], k = 2
輸出: [1,4,3,2,5]
範例 2:
輸入: head = [7,9,6,6,7,8,3,0,9,5], k = 5
輸出: [7,9,6,6,8,7,3,0,9,5]
範例 3:
輸入: head = [1], k = 1
輸出: [1]
範例 4:
輸入: head = [1,2], k = 1
輸出: [2,1]
範例 5:
輸入: head = [1,2,3], k = 2
輸出: [1,2,3]
解題思維:
就是單純地先掃過一次串列統計其長度 n 值為何。然後再掃過一次,而這次便可以求得第 k 個節點以及第 n - k + 1 節點(即從尾端到開頭的第 k 個節點),並將兩者交換。
不過當 k = n - k + 1 時,代表我們會存取到同一個節點,此時則不需要交換(正確來說,交換了等同於沒有交換)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。